2014-01-25 105 views
3

我有以下幾點:請問在LINQ查詢中include和where事件的順序是什麼?

var objectives = _objectivesRepository 
       .GetAll() 
       .Where(o => o.ExamId == examId || examId == 0) 
       .Include(o => o.ObjectiveDetails) 
       .ToList(); 

在一前一後的一個用戶說,它把那裏之前包括LINQ查詢是非常重要的。

有人可以讓我知道這是否正確嗎?訂單是否重要?如果有很多地方和包括?

+0

我會說,這應該沒關係。結果應該完全相同,生成的SQL不應該不同。 – MarcinJuraszek

+0

是的,這是我的想法。但是,正如我被告知的那樣,尋找一些專家意見(無法找到那個帖子,否則說) –

回答

1

在Entity Framework中,它確實很重要,但僅限於某些情況。使用分組或投影時,將無法包含請求的數據。

查看this關於這個問題的博客文章。

1

實際答案,通常是,順序無關緊要。下面您的示例聲明,我會形容的邏輯平移步驟關係查詢:

  1. 獲取的所有對象,他們所有的屬性(在關係代數,他們被認爲是屬性)
  2. 限制檢索到的行根據您的條件((relational algebra projection operation
  3. 限制其即時加載(relational algebra selection operation

在您的特定查詢的檢索的行屬性,則步驟2和3是:i無需更改最終結果。如here所述,這是默認情況。儘管如此,即使最後的結果不會改變,績效也會受到重大影響。這就是現代數據庫具有查詢優化器的原因,這些查詢優化器創建執行計劃以優化特定查詢。

儘管如此,這並非總是如此。所以,我想你總是可以找到上述不適用的情況。關於績效,沒有任何假設是安全的。你應該總是測量的東西。您總是可以使用SQL Server profiler來查看您的linq到實體查詢到最終SQL查詢的翻譯。然後,您可以使用最終SQL查詢的SQL服務器工具(如query analyzer)至see the execution plan

希望我幫了忙!

相關問題