2011-01-04 1 views
0

Я хочу использовать Где метод Linq 2 лиц, которые будут равны этомуИспользование Если метод в Linq 2 Объекты с OR пункт

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

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

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

любые идеи (код выше не будет компилироваться из курса б/с из лямбда-выражения.

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

Я думаю, что и может быть сделано с помощью конкатенации .гда(). Где(), но мне нужен OR.

ответ

3

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

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

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

лямбда (ВЫРАЖЕНИЕ1 ИЛИ выражение2)

Читать код, как:

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

Если это делает вещи более четкие ..

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

+0

Спасибо, прост, но кто бы знал ... ;-) Опечатка была в редакции .. Я переписываю, чтобы удалить перечисления и сделать их короче. но дополнительным u => была проблема. – Dani

1

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

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

С выражением лямбда вам нужно только один раз определить переменную «данный».

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

variableName => expression 

в данном случае мы имеем

u => (expression) 

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

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

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

делает схему И, или любое другое логическое сравнение было бы точно так же

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

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

Where(u=> true) 

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

EDIT: не видел дополнительной информации, которую предоставил редактор Роджера, который, вероятно, объяснил это лучше, чем я, пока я не сделал это сообщение, извините за дублирование.

+0

Спасибо за объяснение. – Dani

Смежные вопросы