C# 使用多个.where语句的linq
我已经使用linq一段时间了,但我认为我对它的理解不如我想象的那样好: 假设我有一份水果清单C# 使用多个.where语句的linq,c#,linq,C#,Linq,我已经使用linq一段时间了,但我认为我对它的理解不如我想象的那样好: 假设我有一份水果清单 class Fruit { string name {get; set;} } //listOfFruits has a random number of fruit objects in it listOfFruits; 如果我想获得名称等于Apple的所有水果对象,我可以这样做: var apples = listOfFruits.Where(x => x.name == "Apple")
class Fruit {
string name {get; set;}
}
//listOfFruits has a random number of fruit objects in it
listOfFruits;
如果我想获得名称等于Apple
的所有水果对象,我可以这样做:
var apples = listOfFruits.Where(x => x.name == "Apple").ToList();
我的第一个问题是,如果我堆叠.Where
语句,它们会根据主列表过滤吗?或者第一个.Where
获取新结果集,然后下一个.Where
根据新结果集进行过滤
以下各项是否相同:
var applesAndOranges = listOfFruits
.Where(x => x.name == "Apple")
.Where(x => x.name == "Orange")
.ToList();
var applesAndOranges = listOfFruits
.Where(x => x.name == "Apple" && x.name == "Orange")
.ToList();
如果这两个函数都没有返回苹果和橙子的列表,我如何查询主水果列表以获取所有名为“Apple”和
“Orange”
的水果,您似乎需要或操作符,它是两个管道:|
。这将返回最后一个表达式中与第一个表达式或第二个表达式匹配的所有项
var applesAndOranges = listOfFruits.Where(x => x.name == "Apple" || x.name == "Orange").ToList();
使用“或”| |而不是“和”&&&sstan我猜有一种水果叫Apple
,另一种水果叫Orange
,他想要两者。@sstan看史蒂夫的评论,如果我用两个分开的,会发生什么?这会做两个级别的过滤吗?我猜它基本上会做一个和。但是编程的好处是很容易找到!做一个.Where(f=>f.name==“Apple”).Where(f=>f.name==“Orange”)就像一个AND,你会得到零结果。