LINQ to EF (3.5) - сгенерированный SQL действительно не использует WHERE 'IN' - PullRequest
0 голосов
/ 26 октября 2011

Поскольку EF 3.5 не поддерживает параметры сбора в методе .Contain (), я видел, как многие люди предлагали использовать пользовательские выражения для решения этой проблемы (http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/095745fe-dcf0-4142-b684-b7e4a1ab59f0).

Однако, если у меня есть длинный список идентификаторов для фильтрации сгенерированного SQL, в этом случае содержится бесконечный список OR. Например,

WHERE (99999 = [Extent1].[ID]) OR (99998 = [Extent1].[ID]) OR (99997 = [Extent1].[ID]) OR...

Этот сгенерированный SQL выполняется на моем компьютере вечно, но как только я заменяю OR на «истинное» предложение IN:

WHERE [Extent1].[ID] IN (99999,99998,99997...)

это завершается менее чем за секунду.

У меня вопрос: что я могу сделать, чтобы LINQ генерировал «истинное» предложение IN вместо OR?

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Обходной путь для MSDN - это создание последовательности ИЛИ, поскольку поставщик LINQ в EFv1 не поддерживает оператор IN, и нет способа сгенерировать его с помощью LINQ.

Если вы хотите использовать LINQ ине ESQL Ваш единственный вариант - обновить до EFv4.

0 голосов
/ 26 октября 2011

вы можете попробовать использовать Entity SQL в этом случае, он имеет поддержку предложения IN

[NOT] IN на MSDN

PS на самом деле при использовании EF в .net 3.5 мы используем исключительно EntitySQL, так как он дал более предсказуемые и более быстрые результаты для сложных запросов

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