Lambdaexpression式中的多个Where子句

我有一个简单的lambdaexpression式,如下所示:

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

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

 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是您的IEnumerabletypes
  • bool意味着它需要返回一个布尔值

所以,当你这样做

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

您传递给Where的lambda包含任何正常的C#代码,例如&&运算符:

 .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) 

您可以使用任何比较运算符(想像它做一个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。

也许

 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) 
 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)