EntityFramework Multiple Where

时间:2016-06-14 20:24:50

标签: c# .net entity-framework linq

我想知道,如果我一个接一个地使用多个Where(...)方法,那么EntityFramework足够聪明,可以在生成的查询中将它组合在一起。假设我有:

context.Items
    .Where(item => item.Number > 0)
    .Where(item => item.Number < 5)
    .ToList();

生成的SQL查询是否与我写的相同:

context.Items
    .Where(item => item.Number > 0 && item.Number < 5)
    .ToList();

是否有多个Where子句的幕后优化?

1 个答案:

答案 0 :(得分:6)

是的,有。执行此操作的不是实体框架。实际上,SQL Provider Factory的工作是组成数据库的查询。根据您使用的数据库,此代码将来自不同的来源。

对于MSSQL,代码是Microsoft的,并且位于库System.Data.SqlClient中。如果你在web.config中查看你的连接元素,你应该注意属性“providerName”。

在此库或与其类似的库中,通常使用递归访问者模式来导航定义的表达式树对象图,以便尽可能地生成最有效的查询。

使用多个where子句非常容易检测和优化,这些库存在问题的地方倾向于使用深层嵌套的投影。

如果使用

,您可以看到查询生成的SQL
context.Items
.Where(item => item.Number > 0)
.Where(item => item.Number < 5)
.ToString();