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