Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多个.where语句的linq_C#_Linq - Fatal编程技术网

C# 使用多个.where语句的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")

我已经使用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").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,你会得到零结果。