Множественные предложения Where в выражениях лямбда
У меня есть простое выражение лямбда, которое выглядит примерно так:
x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty)
Теперь, если я хочу добавить еще одно предложение where к выражению, скажем, l.InternalName != String.Empty
, то каково было бы это выражение?
Ответы
Ответ 1
Может быть
x => x.Lists.Include(l => l.Title)
.Where(l => l.Title != String.Empty && l.InternalName != String.Empty)
или
x => x.Lists.Include(l => l.Title)
.Where(l => l.Title != String.Empty)
.Where(l => l.InternalName != String.Empty)
Когда вы смотрите на реализацию Where
, вы можете видеть, что она принимает Func(T, bool)
; это означает:
-
T
- ваш тип IEnumerable
-
bool
означает, что ему нужно вернуть логическое значение
Итак, когда вы делаете
.Where(l => l.InternalName != String.Empty)
// ^ ^---------- boolean part
// |------------------------------ "T" part
Ответ 2
Лямбда, которую вы передаете на Where
, может включать любой нормальный код С#, например оператор &&
:
.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)
Ответ 3
Вы можете включить его в ту же самую формулировку с помощью && оператор...
x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty
&& l.InternalName != String.Empty)
Вы можете использовать любой из операторов сравнения (подумайте об этом как о выполнении инструкции if), например...
List<Int32> nums = new List<int>();
nums.Add(3);
nums.Add(10);
nums.Add(5);
var results = nums.Where(x => x == 3 || x == 10);
... вернет 3 и 10.
Ответ 4
Может
x=> x.Lists.Include(l => l.Title)
.Where(l => l.Title != string.Empty)
.Where(l => l.InternalName != string.Empty)
?
Возможно, вы также можете поставить его в том же разделе where:
x=> x.Lists.Include(l => l.Title)
.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)
Ответ 5
x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty).Where(l => l.Internal NAme != String.Empty)
или
x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty && l.Internal NAme != String.Empty)