powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ join List<T> и большой таблицы из базы
4 сообщений из 4, страница 1 из 1
LINQ join List<T> и большой таблицы из базы
    #38128787
Zigs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь сделать join между неким List<T> с несколькими сотнями записей и таблицей в базе с несколькими миллионами записей.
Задача - выяснить, есть ли в БД строки с такими же параметрами как и в List<T>.
Индекс в таблице присутствует.
Код: c#
1.
2.
3.
4.
5.
foreach (var rec in (from temp_row in this.ListRows
         join db_row in Db.TranGLC on new { temp_row.Company, temp_row.RelatedToFile, temp_row.Key1, temp_row.Key2, temp_row.Key3}
               equals new { db_row.Company, db_row.RelatedToFile, db_row.Key1, db_row.Key2, db_row.Key3  }
                                                  where temp_row.RecordType != "A"
  select new TranGLCExpressionColumnResult() { Company = db_row.Company, relatedToFile = temp_row.RelatedToFile, Key1 = temp_row.Key1, Key2 = temp_row.Key2, Key3 = temp_row.Key3, recordtype = temp_row.RecordType }))



Выполнение этой конструкции практически вешает машину, занимая все системные ресурсы. Если посмотреть профайлером, то в SQL приходит запрос, который делает выборку сразу ВСЕХ записей из таблицы в БД на сторону клиента. Я так понимаю, что непосредственно сам join будет происходить не в БД, а на клиенте... ну это и понятно, БД же ничего не знает о данных в List<T>.

Вопрос в том как можно изменить такую конструкцию (или на что ее заменить), чтобы вытащить соединяющиеся данные?

Спасибо.
...
Рейтинг: 0 / 0
LINQ join List<T> и большой таблицы из базы
    #38129129
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши SQL запрос, которых хотелось бы видеть, проверь его работу в Management Studio, удовлетворены ли ожидания. Если да, сикдывай сюда SQL запрос.
P.S. Чтобы получить быстро ответ на вопрос, принято предоставлять тестовый код, а не тот огрузок. Плюс схему таблиц и их наполнение. Слепи простенькую демку.
...
Рейтинг: 0 / 0
LINQ join List<T> и большой таблицы из базы
    #38129441
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZigsЗадача - выяснить, есть ли в БД строки с такими же параметрами как и в List<T>.

"большая" таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
-- Пусть есть таблица
CREATE TABLE BIG_TABLE
(
	ID INT,
	DATA NVARCHAR(100)
);

-- В которой "много" данных
INSERT INTO BIG_TABLE
	  SELECT A.ID, A.NAME
		FROM SYSOBJECTS A
				CROSS JOIN
			 SYSOBJECTS B
				CROSS JOIN
			 SYSOBJECTS C	
	




Поиск входящих в нее строк
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- Сессионная temporary table
DROP TABLE #TMP;
CREATE TABLE #TMP
(
	ID INT,
	DATA NVARCHAR(100)
);

-- Пара строк которых в "большой" таблице точно нет
INSERT INTO #TMP VALUES(-1, 'Test-1');
INSERT INTO #TMP VALUES(-2, 'Test-2');

-- Щипотка данных из большой
INSERT INTO #TMP
	SELECT *
	  FROM BIG_TABLE
	 WHERE ID < 5; 
	 
-- Отвечаем чуть больше, чем на вопрос задачи
SELECT ID, DATA
  FROM #TMP

		 INTERSECT
		 
SELECT ID, DATA
  FROM BIG_TABLE;




Ради интереса накатал, в силу почти не знания MS SQL SERVER, об эффективности судить не могу, да и при такой постановке (где же схема данных, автор?) говорить о чем-то смысла мало. На какие поля у вас индексы есть?
...
Рейтинг: 0 / 0
LINQ join List<T> и большой таблицы из базы
    #38129472
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача - выяснить, есть ли в БД строки с такими же параметрами как и в List<T>.

Что в ответе должно быть?

1) Отдать строки, которые есть
2) Просто сказать да/нет (все строки списка есть в большой)
3) Просто сказать да/нет (хоть какая то строка из списка есть в большой)

и т. п..
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ join List<T> и большой таблицы из базы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]