性能有差異,取決於where
子句在linq表達式中的位置?linq表達式是如何構建的?
看看下面的代碼:
dbContext.AnEntity.Include("AnotherEntity").Where(e => e.ID == id).ToList();
dbContext.AnEntity.Where(e => e.ID == id).Include("AnotherEntity").ToList();
這兩個表達式的執行計劃相同或做的有什麼不同?
性能有差異,取決於where
子句在linq表達式中的位置?linq表達式是如何構建的?
看看下面的代碼:
dbContext.AnEntity.Include("AnotherEntity").Where(e => e.ID == id).ToList();
dbContext.AnEntity.Where(e => e.ID == id).Include("AnotherEntity").ToList();
這兩個表達式的執行計劃相同或做的有什麼不同?
理論上,沒有。實際上,您需要根據具體情況進行測試,並根據提供商提供商進行測試。對於一個相關的(但略有不同)的例子,在L2S中很長一段時間,.Where(predicate).FirstOrDefault()
和.FirstOrDefault(predicate)
(它們具有相同的語義)不具有而不是具有相同的行爲(具體涉及身份映射快捷方式)。
我預計這將是相同的,特別是因爲.Include
(擴展結果集)是一個有點單獨categry比.Where
(謂語),但:驗證的唯一方法是進行測試和比較生成的SQL和性能。
「messen ist wissen」(「測量就是知道」) – FatAlbert 2012-08-06 09:14:57
你確定你的代碼實際編譯了嗎? 'Include'在'ObjectQuery'實例上調用,但'Where(某些lambda表達式在此)'方法返回'IQueryable '。我不認爲你可以選擇實際放置'Include'的位置。 –
ken2k
2012-08-06 08:59:51