EntityFramework Multiple Where

And*_*rei 10 .net c# linq entity-framework

我想知道,如果我Where(...)一个接一个地使用多个方法,EntityFramework足够聪明,可以将它组合在一个结果查询中.比方说我有:

context.Items
    .Where(item => item.Number > 0)
    .Where(item => item.Number < 5)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

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

context.Items
    .Where(item => item.Number > 0 && item.Number < 5)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

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

Tra*_*s J 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();
Run Code Online (Sandbox Code Playgroud)