免责声明:我无法在another question找到所有答案。
在LINQPad中准备查询时,我发现某些结果以IQueryable的形式返回,而DbSet中的某些结果则返回https://dotnetfiddle.net/r1ghBv。
可以在此处找到查询的所有版本:{{3}}
// returns IQueryable<Message>
// Time : 133 ms
from m in Messages
where m.MessageStatusId < 5 && (
from mm in Messages
where mm.MessageStatusId < 5
group mm by mm.F_Id into g
select g.Key
).Contains(m.F_Id)
select m
VS
// returns DbQuery<Message>
// Time : 112 ms
from mm in Messages
where mm.MessageStatusId < 5
group mm by mm.F_Id into g
from m in g
select m
在LINQPad中,DbQuery版本有89行IL,而IQueryable则为171行。
DbQuery是一个类vs IQueryable是一个接口,而DbQuery显然似乎有更多的方法。但是,如果我在C#.NET 4.5.2和Entity Framework 6.x中使用以下查询,我有兴趣知道哪个可能有更好的SQL性能?
问题:
答案 0 :(得分:0)
返回类型与Message类型的一行相同。两个查询之间的时差可以从第二个&#39;来自&#39;来解释。在查询中。在第一个查询中,您要枚举N x N,而第二个查询是通过N x M枚举的.M是第二个&#39;来自&#39;。在第二个查询&#39; g&#39;是所有消息的子集。