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)