C# Lambda表达式中的多个Where子句

C# Lambda表达式中的多个Where子句,c#,.net,lambda,C#,.net,Lambda,我有一个简单的lambda表达式,如下所示: x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty) 现在,如果我想在表达式中再添加一个where子句,比如,l.InternalName!=String.Empty那么表达式是什么?可以是 x => x.Lists.Include(l => l.Title) .Where(l => l.Title != String.E

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

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty)
现在,如果我想在表达式中再添加一个where子句,比如,
l.InternalName!=String.Empty
那么表达式是什么?

可以是

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

当您查看
其中的
实现时,您可以看到它接受
函数(T,bool)
;这意味着:

  • T
    是您的IEnumerable类型
  • bool
    表示它需要返回一个布尔值
所以,当你这么做的时候

.Where(l => l.InternalName != String.Empty)
//     ^                   ^---------- boolean part
//     |------------------------------ "T" part

也许吧

?

您也可以将其放在同一where子句中:

x=> x.Lists.Include(l => l.Title)
    .Where(l => l.Title != string.Empty && l.InternalName != string.Empty)

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

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);
List nums=new List();
增加(3);
增加(10);
增加(5);
var结果=nums,其中(x=>x==3 | | x==10);

…将返回3和10。

传递到
的lambda,其中
可以包括任何正常的C代码,例如
&
运算符:

.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)

这有点离题,但string类有一个方法string.IsNullOrEmpty,您可以使用它,而不是将其与string.Empty进行比较
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 
    && l.InternalName != String.Empty)
List<Int32> nums = new List<int>();

nums.Add(3);
nums.Add(10);
nums.Add(5);

var results = nums.Where(x => x == 3 || x == 10);
.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)