EF Core中的&和&&有什么区别

Kam*_*ran 1 entity-framework entity-framework-core ef-core-2.2

我知道&&会使评估短路,因此如果不需要,则不必评估RHS,但是EF呢?&和&&之间有什么区别(与|和||相同)?表现明智!

Iva*_*oev 5

但是EF呢?&和&&之间有什么区别(与|和||相同)?表现明智!

就在这里。

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

其次,即使使用服务器评估,EF Core也会对其进行不同的转换。例如,这是SqlServer的翻译:

LINQ             SQL
==============   ============ 
expr1 && expr2   expr1 AND expr2
expr1 & expr2    (expr1 & expr2) = 1
Run Code Online (Sandbox Code Playgroud)

这是否会影响性能取决于数据库查询优化器,但是第一个看起来通常更好。一些不提供对bool类型的本机支持的数据库提供程序可能会生成效率低下的转换,甚至无法转换&/ |谓词。

简短地说,最好在LINQ查询中始终使用逻辑&&||运算符。

  • @TanvirArjel如何评估查询取决于数据库查询优化器及其创建的查询执行计划。他们被允许做很多事情-重新排序条件(以便使用索引)等,因此通常您无法回答问题。 (2认同)