LINQ ГДЕ с ИЛИ - PullRequest
       12

LINQ ГДЕ с ИЛИ

11 голосов
/ 09 ноября 2010

Я использую LINQ для создания моего предложения where следующим образом:

var query = from x in context.Xs
            select x;

if (y == ...)
{
    query = query.Where(x => x.Y == 1);
}

У меня есть куча этих операторов "if .... where".Проблема, с которой я столкнулся, заключается в том, что все эти группы объединяются в операторах where с использованием AND, но мне нужны все предложения where для использования OR.Есть ли простой способ перенести этот код в код ИЛИ?Или даже какой самый простой способ сделать это с ИЛИ?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 09 ноября 2010

Вы можете сделать что-то вроде:

var query = from x in context.Xs
        where
          (x.X == 1) ||
          (x.Y == 2) ||
          (x.Z == "3")
        select x;
7 голосов
/ 09 ноября 2010

PredicateBuilder - идеальное решение для вашей проблемы. Это позволяет вам продолжать добавлять отдельные операторы «И» и «ИЛИ» вместе.

4 голосов
/ 09 ноября 2010

Я бы предложил использовать деревья выражений для динамического построения запроса:

(MSDN) Как: использовать деревья выражений для построения динамических запросов

Вы также можете использоватьPredicateBuilder (что делает нечто похожее под капотом) для динамического построения Предиката и последующей передачи окончательного Предиката в метод Where.

...