Kam*_*ran 1 entity-framework entity-framework-core ef-core-2.2
我知道&&会使评估短路,因此如果不需要,则不必评估RHS,但是EF呢?&和&&之间有什么区别(与|和||相同)?表现明智!
但是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查询中始终使用逻辑&&和||运算符。