LINQ-to-SQL IN () - PullRequest
       31

LINQ-to-SQL IN ()

0 голосов
/ 21 сентября 2009

В настоящее время я использую такой блок кода, чтобы получить набор объектов БД с соответствующими идентификаторами.

List<subjects> getSubjectsById(List<long> subjectIDs){

  return ctx.tagSubjects.Where(t => subjectIDs.Contains(t.id)).ToList();
}

Но это действительно неэффективно, потому что требует, чтобы вся таблица была прочитана из базы данных и затем отфильтрована внутри C #.

То, что я предпочел бы сделать, было бы чем-то эквивалентным:

SELECT * FROM subjects WHERE subjects.id IN (1,2,3,4,5,...);

Большая разница в том, что в первом примере фильтрация происходит внутри кода C #, а во втором - на сервере SQL (где находятся данные).

Есть ли [лучший] способ сделать это с помощью LINQ?

1 Ответ

4 голосов
/ 21 сентября 2009

Где вы узнали, что он загружает всю таблицу из SQL Server?

Я уверен, что он делает то, что вы хотите. Он переводит запрос в параметризованное предложение IN, например:

... IN (@p1, @p2, @p3)

и передает содержимое списка в качестве значений этим параметрам. Вы можете подтвердить это с помощью таких инструментов, как SQL Profiler и визуализатор отладчика LINQ to SQL, или установить свойство DataContext.Log в console (до выполнения запроса) и прочитать сгенерированный SQL:

dataContext.Log = Console.Out;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...