我想知道,如果我一个接一个地使用多个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子句的幕后优化?
发布于 2016-06-14 20:30:57
是的,有。这样做的不是实体框架。实际上,SQL提供者工厂()的任务是为数据库编写查询。根据您使用的数据库,此代码将来自不同的来源。
对于MSSQL,代码是微软的,在库System.Data.SqlClient中。如果您查看web.config中的连接元素,您应该注意到属性"providerName“。
在这个库中,或者类似于它的库中,通常使用递归访问者模式在已定义的Expression对象图中导航,以便生成尽可能高效的查询。
使用多个where子句非常容易检测和优化,这类库遇到麻烦的地方往往是嵌套的投影。
如果您使用
context.Items
.Where(item => item.Number > 0)
.Where(item => item.Number < 5)
.ToString();https://stackoverflow.com/questions/37821455
复制相似问题