Lambdaexpression式中的多个Where子句

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

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

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

5 Solutions collect form web for “Lambdaexpression式中的多个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.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) 
  • 在C#中使用Action委托
  • C ++ Lambdas:“可变”和“引用捕获”之间的区别
  • lambdaexpression式中的枚举编译方式不同; 重载解决scheme改进的后果?
  • 在Ruby块中使用“返回”
  • 为什么必须把一个完整的代码块放在lambda体中呢?
  • 如何正确确定一个对象是一个lambda?
  • 我怎样才能从Java 8stream内引发CHECKEDexception? (不包装成未经检查的例外)
  • Func <string,string>和delegate有什么区别?
  • C#joinLinq和Lambda
  • 使用lambda按多列分组
  • Python中lambdaexpression式的赋值