Подтвердить что ты не робот

Множественные предложения Where в выражениях лямбда

У меня есть простое выражение лямбда, которое выглядит примерно так:

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty)

Теперь, если я хочу добавить еще одно предложение where к выражению, скажем, l.InternalName != String.Empty, то каково было бы это выражение?

4b9b3361

Ответ 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)