我在实体框架中放置条件的顺序是否重要

use*_*278 5 c# entity-framework

我在实体框架中放置条件的顺序是否重要?我知道 EF 在运行 SQL 查询之前做了一些优化。那么我首先提出什么条件重要吗?

例如(只是我们应用程序中真实查询的一个子集)。CaseNumber 是一个字符串,而 OrganizationId 是一个 guid。

context.Evaluation.Where(e => e.Case.CaseNumber.Contains(inputModel.CaseNumber) && e.Case.OrganizationId == inputModel.OrganizationId)
Run Code Online (Sandbox Code Playgroud)

或者

context.Evaluation.Where(e => e.Case.OrganizationId == inputModel.OrganizationId) && e.Case.CaseNumber.Contains(inputModel.CaseNumber)
Run Code Online (Sandbox Code Playgroud)

A.T*_*.T. 5

MS Sql 是高级 RDBMS,对于每个查询都有自己的执行计划,并为连续查询计划缓存,这就是它为您提供高性能的方式。

实体框架中使用的每个 lambda 表达式首先会转换为 sql 查询,然后由 sql profiler 进行优化,因此在 lambda 表达式中放置条件并不重要。

但是,如果您仍然没有获得所需的性能并且认为 sql 执行计划没有达到标准,您可以强制 sql 优化器使用您定义的执行计划。

你可以在这里阅读相关内容你可以在堆栈溢出上遵循相同的方法