2012-08-06 54 views
4

性能有差異,取決於where子句在linq表達式中的位置?linq表達式是如何構建的?

看看下面的代碼:

dbContext.AnEntity.Include("AnotherEntity").Where(e => e.ID == id).ToList(); 

dbContext.AnEntity.Where(e => e.ID == id).Include("AnotherEntity").ToList(); 

這兩個表達式的執行計劃相同或做的有什麼不同?

+1

你確定你的代碼實際編譯了嗎? 'Include'在'ObjectQuery '實例上調用,但'Where(某些lambda表達式在此)'方法返回'IQueryable '。我不認爲你可以選擇實際放置'Include'的位置。 – ken2k 2012-08-06 08:59:51

回答

1

理論上,沒有。實際上,您需要根據具體情況進行測試,並根據提供商提供商進行測試。對於一個相關的(但略有不同)的例子,在L2S中很長一段時間,.Where(predicate).FirstOrDefault().FirstOrDefault(predicate)(它們具有相同的語義)不具有而不是具有相同的行爲(具體涉及身份映射快捷方式)。

預計這將是相同的,特別是因爲.Include(擴展結果集)是一個有點單獨categry比.Where(謂語),但:驗證的唯一方法是進行測試和比較生成的SQL和性能。

+0

「messen ist wissen」(「測量就是知道」) – FatAlbert 2012-08-06 09:14:57