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
LINQ-是Where(谓词)。FirstOrDefault()与FirstOrDefault(谓词)相同_Linq - Fatal编程技术网

LINQ-是Where(谓词)。FirstOrDefault()与FirstOrDefault(谓词)相同

LINQ-是Where(谓词)。FirstOrDefault()与FirstOrDefault(谓词)相同,linq,Linq,我总是在Where子句中使用谓词编写LINQ查询,后跟FirstOrDefault子句。我开始在FirstOrDefault子句中看到谓词示例 一个比另一个好吗?EF(SQL)的答案会不同吗 A.使用Where子句 List<Product> products = GetProductList(); Product productWhere = products.Where(p => p.ProductID == 789).FirstOrDefault(); List&

我总是在Where子句中使用谓词编写LINQ查询,后跟FirstOrDefault子句。我开始在FirstOrDefault子句中看到谓词示例

一个比另一个好吗?EF(SQL)的答案会不同吗

A.使用Where子句

List<Product> products = GetProductList(); 

Product productWhere = products.Where(p => p.ProductID == 789).FirstOrDefault(); 
List<Product> products = GetProductList(); 

Product productNoWhere = products.FirstOrDefault(p => p.ProductID == 789); 
List products=GetProductList();
Product productWhere=products.Where(p=>p.ProductID==789).FirstOrDefault();
B.无何处条款

List<Product> products = GetProductList(); 

Product productWhere = products.Where(p => p.ProductID == 789).FirstOrDefault(); 
List<Product> products = GetProductList(); 

Product productNoWhere = products.FirstOrDefault(p => p.ProductID == 789); 
List products=GetProductList();
productNoWhere=products.FirstOrDefault(p=>p.ProductID==789);

因为Linq中的方法链是惰性评估的,所以两者之间不应有任何实质性差异
Where.FirstOrDefault
在获得值时将停止执行,就像
FirstOrDefault(谓词)
将停止执行一样

换句话说,
FirstOrDefault
(或者下游的任何其他Linq操作符)一次接受一个来自
的项目进行评估,而不是一次接受整个列表(Linq操作符返回
IEnumerable
的结果本质上是
收益率
返回值

另请参见

我发现了他们行为不同的例子。如果没有WHERE子句,您可能会得到意外的结果。