在实体框架中放置条件的顺序是否重要?我知道EF在运行SQL查询之前会做一些优化。那么我首先提出的条件是否重要?
例如(仅仅是我们应用程序中真实查询的一个子集)。 CaseNumber是一个字符串,OrganizationId是一个guid。
context.Evaluation.Where(e => e.Case.CaseNumber.Contains(inputModel.CaseNumber) && e.Case.OrganizationId == inputModel.OrganizationId)
或者
context.Evaluation.Where(e => e.Case.OrganizationId == inputModel.OrganizationId) && e.Case.CaseNumber.Contains(inputModel.CaseNumber)
答案 0 :(得分:3)
MS Sql是高级RDBMS,每个查询和缓存都有自己的执行计划,可以为连续查询提供高性能的方式。
在Entity框架中使用的每个lambda表达式首先转换为sql查询,然后由sql profiler进行优化,因此在lambda表达式中放置条件的位置并不重要。
但是如果你仍然没有达到预期的性能并认为sql执行计划没有达到标准,你可以强制sql优化器使用你定义的执行计划。
您可以阅读here.,stack overflow
答案 1 :(得分:1)
不,没关系。 任何高级数据库都有一个优化器,可以自由地移动条件,连接和其他任何东西来优化性能。
您应该以开发人员易于阅读和理解的方式对其进行处理。