我在实体框架

时间:2015-04-24 07:24:00

标签: c# entity-framework

在实体框架中放置条件的顺序是否重要?我知道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)

2 个答案:

答案 0 :(得分:3)

MS Sql是高级RDBMS,每个查询和缓存都有自己的执行计划,可以为连续查询提供高性能的方式。

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

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

您可以阅读here.stack overflow

答案 1 :(得分:1)

不,没关系。 任何高级数据库都有一个优化器,可以自由地移动条件,连接和其他任何东西来优化性能。

您应该以开发人员易于阅读和理解的方式对其进行处理。