首页 > 解决方案 > EF Core 中的 & 和 && 有什么区别

问题描述

我知道 && 会使评估短路,因此如果不需要,它就不必评估 RHS,但是 EF 呢?& 和 && 之间有什么区别(| 和 || 相同)?性能方面!

标签: entity-frameworkentity-framework-coreef-core-2.2

解决方案


但是EF呢?& 和 && 之间有什么区别(| 和 || 相同)?性能方面!

就在这里。

首先,有时 EF Core 使用客户端评估,因此不能短路。

其次,即使在使用服务器评估时,EF Core 也会以不同的方式翻译它们。例如,这里是 SqlServer 的翻译:

LINQ             SQL
==============   ============ 
expr1 && expr2   expr1 AND expr2
expr1 & expr2    (expr1 & expr2) = 1

这是否影响性能取决于数据库查询优化器,但第一个看起来通常更好。并且一些对类型没有原生支持的数据库提供程序bool可能会生成非常低效的翻译,甚至无法翻译&/|谓词。

简而言之,最好始终在 LINQ 查询中使用逻辑&&和运算符。||


推荐阅读