LINQ ГДЕ с OR

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

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

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

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

Спасибо.

Ответ 1

PredicateBuilder - идеальное решение для вашей проблемы. Это позволяет вам одновременно добавлять индивидуальные "AND", а также "OR".

Ответ 2

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

var query = from x in context.Xs
        where
          (x.X == 1) ||
          (x.Y == 2) ||
          (x.Z == "3")
        select x;

Ответ 3

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

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

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