Entity Framework Linq Query с использованием нескольких где - PullRequest
0 голосов
/ 07 апреля 2020

Является ли кратное .Where () функцией AND (&&) или Or (||), например:

 var db = new myContext();
 var query = db.User.Where(u => u.Gender == "Male");
 query = query.Where(u => u.IsActive == true);

Это эквивалентно:

   Select *
   from user
   where gender = 'Male' 
     and IsActive = true;

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Вы передаете результат одного фильтра через другой, поэтому логически они будут действовать как «и».

Скажем, у вас есть колода карт. Затем вы используете «фильтр», который дает вам только красные карточки. Затем вы хотите передать результат в другой фильтр, который дает вам только семерки.

Таким образом, вы получаете красные карточки И значение семь.

Есть ли способ изменить это поведение и заставить его действовать как 'или'?

Нет, нет способа получить запрос с предложением Where и "добавить" второе предложение Where, которое действует как or.

Если вы пытаетесь динамически добавлять фильтры с помощью операции «или», самый прямой способ - объединить два предиката с «или» (см. «Или» эквивалент в Linq Где ( ) лямбда-выражение )

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

var result1 = a.Where(u => u.Gender == "Male");
var result2 = a.Where(u => u.IsActive == true);

var result = result1.Union(result2);

Но могут быть проблемы с производительностью с этим видом "косвенного" ИЛИ

0 голосов
/ 07 апреля 2020

Просто используйте оператор &&:

var query = db.User.Where(u => u.Gender == "Male" && u.IsActive == true);

Оператор && означает and. Что вышеупомянутое условие может быть прочитано как получить всех пользователей с полом == "Мужской" и isActive == "true"

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