Использование метода Where в Linq 2 Entities с предложением OR - PullRequest
0 голосов
/ 04 января 2011

Я хочу использовать метод Where в Linq 2 сущности, которые будут равны этому

userRepository.Users.Where(u=>u.RoleID == 1 || u=>u.RoldID == 2).Select(o => new SelectListItem { Text = o.Role.RoleName, Value = o.RoleID.ToString() }).ToList();

Проблема, конечно, в Где (u => u.RoleID == 1 || u => u.RoldID == 2)

Проблема в том, что я не знаю, как использовать метод WHERE с OR внутри предложения WHERE.

любые идеи (приведенный выше код не скомпилирует, конечно, b / c лямбда-выражения.

userRepository.Users возвращает список сущностей пользователей.

Полагаю, что это можно сделать с помощью конкатенации .Where (). Where (), но мне нужно ИЛИ.

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Просто удалите лишние u =>

Where(u => u.RoleID == 1 || u.RoleID == 2).

В своем коде вы пытаетесь "или" лямбды, "lambda1 ИЛИ lambda2", это невозможно, как вы заметили.Однако вы можете "или" выражение внутри лямбды:

лямбда (выражение1 ИЛИ выражение2)

Считать код как:

(Пользователь пользователя) {вернуть user.RoleId== 1 ||user.RoleId == 2;}

Если это прояснит ситуацию ..

Кроме того, я думаю, у вас есть опечатка в последней части "u.RoldId == 2" вместо RoleId ..

1 голос
/ 04 января 2011

Где используется общий анонимный делегат, в данном случае Func.

Что это означает: «при условии, что пользователь возвращает логическое значение», или «при условии, что пользователь предоставляет критерии для определения, должен ли я выбрать этого пользователя».

С лямбда-выражением вам нужно только один раз определить переменную, которую вы "дали".

Основной синтаксис:

variableName => expression

в этом случае имеем

u => (expression)

где u - пользователь, а (выражение) - выражение, которое оценивается как логическое значение.

Where(u => (u.RoleID==1 || u.RoleID==2))

(который, как указал Роджер, когда я заканчивал этот пост, является правильным ответом)

выполнение AND или любого другого логического сравнения будет точно таким же

Where(u=> u.Name.Equals(userName) && u.Email.Equals(email))

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

Where(u=> true)

Это выберет всех пользователей, хотя, вероятно, бессмысленно демонстрирует структуру лямбда-выражения.

РЕДАКТИРОВАТЬ: не видел дополнительной информации, предоставленной редактором Роджера, который, вероятно, объяснил это лучше, чем я, пока я не сделал этот пост, извините за дублирование.

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