实体框架 Linq 查询:.Where 链 vs &&

Posted

技术标签:

【中文标题】实体框架 Linq 查询:.Where 链 vs &&【英文标题】:Entity Framework Linq query: .Where chain vs && 【发布时间】:2011-06-29 02:23:05 【问题描述】:

这个问题与使用带有实体框架的 Linq 进行查询优化有关。

链接 .Where 子句和在带有实体框架的 linq 查询的单个 .Where 子句中使用 && 之间有什么区别吗?

例如:假设我有以下代码:

var result = context.SomeEntity.Where(exp1).Where(exp2);

var result = context.SomeEntity.Where(exp1 && exp2);

在评估这些产生相同结果的语句时,linq 和实体框架是否以相同的方式评估它们?即,两者将具有相同的执行计划,因此同样有效?

【问题讨论】:

【参考方案1】:

是的,两者都有相同的执行计划。我添加了一个 sql 跟踪,并且都创建了相同的 SQL 语句

【讨论】:

【参考方案2】:

我总是选择&&,因为它使代码更易于阅读。通过使用多个 Where 这将产生大量额外的噪音并分散逻辑的注意力。

【讨论】:

如果 && 语句较短且很少,则更易于阅读,但如果您将多个较长的语句链接在一起,则 .Where 链接更有意义且更具可读性。

以上是关于实体框架 Linq 查询:.Where 链 vs &&的主要内容,如果未能解决你的问题,请参考以下文章

具有 LINQ 的实体框架在 WHERE 子句中使用 CONTAINS 非常慢且具有大整数列表

查询 (LINQ) 表达式无法转换为实体框架核心

动态 SQL 到 LINQ 实体框架

具有许多表、左外连接和 where 子句的 LINQ 查询

实体框架Linq查询:如何在多个导航属性上从何处选择并从第三个导航属性中选择

Linq 到实体子查询