2012-08-02 77 views
2

我有一些缓慢的linq查询,需要优化它们。我已阅读了关于编译查询并在我的只读操作中设置NoTracking中的合并选项。 但我认为我的问题是我有太多的包括所以在数据库中完成的连接数是巨大的。Linq - 操作顺序是否相关?

context.ExampleEntity 
     .Include("A") 
     .Include("B") 
     .Include("D.E.F") 
     .Include("G.H") 
     .Include("I.J") 
     .Include("K.M") 
     .Include("K.N") 
     .Include("O.P") 
     .Include("Q.R") 
     .Where(a => condition1 || complexCondition2) 

我的疑问是,如果我把之前包含的地方,这将过滤ExampleEntity对象之前进行所有连接?林不知道如何将linq查询转换为SQL

+0

不是你的问题的答案,而是一个有趣的方法来'包括':[实体框架 - 编译安全的包括](http://www.codetuning.net/blog/post/Entity-Framework-compile-safe- Includes.aspx) – 2012-08-02 15:07:49

+1

您可以使用SQL事件探查器或EF事件探查器(http://efprof.com/)查看针对数据库执行的确切查询。 – Marty 2012-08-08 11:35:22

回答

0

“是”。 每个子查询将结果传递给下一个。首先移动Where将过滤,然后对可能较小的集执行包含。

在特定查询的上下文中是否有意义由您决定。