我总是使用Where子句后跟FirstOrDefault子句的谓词编写LINQ查询。我开始在FirstOrDefault子句中看到带谓词的示例。
一个比另一个好吗?答案与EF(SQL)不同吗?
一个。使用Where子句
List<Product> products = GetProductList();
Product productWhere = products.Where(p => p.ProductID == 789).FirstOrDefault();
B中。没有条款
List<Product> products = GetProductList();
Product productNoWhere = products.FirstOrDefault(p => p.ProductID == 789);
https://code.msdn.microsoft.com/LINQ-Element-Operators-0f3f12ce
答案 0 :(得分:1)
因为Linq中的方法链被懒惰地评估,所以两者之间不应存在任何实质性差异。 Where.FirstOrDefault
在获取值时将停止执行,就像FirstOrDefault(Predicate)
一样。
换句话说,FirstOrDefault
(或任何其他Linq运营商下游,就此问题)从Where
接受一个 {{1>}项以进行评估,而不是一次完整列表(返回IEnumerable
的Linq运算符的结果本质上是yield
return
。