EF 4 Query - проблема с несколькими параметрами - PullRequest
0 голосов
/ 08 ноября 2010

Уловка, позволяющая избежать фильтрации по обнуляемым параметрам в SQL, была примерно такой:

select * from customers where (@CustomerName is null or CustomerName = @CustomerName)

Это хорошо сработало для меня в LINQ to SQL:

string customerName = "XYZ";
var results =
   (from c in ctx.Customers 
    where (customerName == null || (customerName != null && c.CustomerName == customerName)) 
    select c);

Но это вышезапрос в ADO.NET EF не работает для меня;он должен фильтровать по имени клиента, потому что он существует, но это не так.Вместо этого он запрашивает все записи клиентов.Теперь это упрощенный пример, потому что у меня есть много полей, с которыми я использую такую ​​логику.Но на самом деле он никогда не фильтрует, не запрашивает все записи и не вызывает исключение тайм-аута.Но страннее то, что другой запрос делает что-то аналогично, без проблем.

Есть идеи почему?Похоже, ошибка для меня, или есть обходной путь для этого?С тех пор я переключился на методы расширения, которые работают.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Я до сих пор не понял, но переписать его как процесс исправил проблему, так что это был мой обходной путь, настолько плохой, насколько это возможно.

0 голосов
/ 08 ноября 2010

Пробовали ли вы использовать троичный оператор в предложении where?

where (customerName == null ? true : c.CustomerName == customerName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...