LINQ - Where(Predicate).FirstOrDefault() 是否与 FirstOrDefault(Predicate) 相同

标签 linq

我一直在编写我的 LINQ 查询时使用 Where 子句中的谓词,后跟 FirstOrDefault 子句。我开始在 FirstOrDefault 子句中看到带有谓词的示例。

这个比那个好吗? EF (SQL) 的答案会有所不同吗?

A. 使用 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

最佳答案

因为 Linq 中的方法链是惰性求值的,所以两者之间应该没有任何实质性的区别。 Where.FirstOrDefault获取到值就会停止执行,就像FirstOrDefault(Predicate)将要。
换句话说,FirstOrDefault (或任何其他下游的 Linq 运算符,就此而言)一次接受来自 Where 的项目。用于评估,而不是一次整个列表(返回 IEnumerable 的 Linq 运算符的结果本质上是一个 yield return 引擎盖下)。
另请参阅
Where.FirstOrDefault vs FirstOrDefault

关于LINQ - Where(Predicate).FirstOrDefault() 是否与 FirstOrDefault(Predicate) 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26491152/

相关文章:

c# - 可访问 'this' 的非静态表达式<Func<X>>

c# - 汇总一个集合的所有属性并动态赋值给另一个对象

c# - LINQ - 外键数据和表达式树

c# - 使用 LINQ 拆分字符串

asp.net-mvc - 使用不带主键的查找在dbSet中查找记录

c# - 将 xmlns 属性添加到根元素

c# - 最新日期的 Lambda 表达式

c# - Entity Framework 不一致 - 在这里工作,而不是那里

entity-framework - 导航属性上的 EF Core 组

c# - 通过 LINQ 创建匿名对象