我一直在编写我的 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/

10-16 01:56