Lambda表达式中的多个Where子句

ash*_*rya 50 .net c# lambda

我有一个简单的lambda表达式,如下所示:

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty)
Run Code Online (Sandbox Code Playgroud)

现在,如果我想在表达式中l.InternalName != String.Empty再添加一个where子句,那么表达式是什么?

Rub*_*ias 108

x => x.Lists.Include(l => l.Title)
     .Where(l => l.Title != String.Empty && l.InternalName != String.Empty)
Run Code Online (Sandbox Code Playgroud)

要么

x => x.Lists.Include(l => l.Title)
     .Where(l => l.Title != String.Empty)
     .Where(l => l.InternalName != String.Empty)
Run Code Online (Sandbox Code Playgroud)

在查看Where实现时,您可以看到它接受了Func(T, bool); 这意味着:

  • T 是你的IEnumerable类型
  • bool 意味着它需要返回一个布尔值

所以,当你这样做的时候

.Where(l => l.InternalName != String.Empty)
//     ^                   ^---------- boolean part
//     |------------------------------ "T" part
Run Code Online (Sandbox Code Playgroud)


Aak*_*shM 13

您传递给的lambda Where可以包含任何普通的C#代码,例如&&运算符:

.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用&&运算符将其包含在相同的where语句中...

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty 
    && l.InternalName != String.Empty)
Run Code Online (Sandbox Code Playgroud)

您可以使用任何比较运算符(将其视为执行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);
Run Code Online (Sandbox Code Playgroud)

...会带回3和10.