2010-08-20 34 views
0

我正在建立第一個asp.net的MVC 2網站閱讀本asp.net article和我碰到一個使用查詢的方法包括LINQ查詢出來。我已經使用了一些linq,但是我從來沒有使用過包含方法,並且想要更好的解釋。它轉化爲linq中的連接嗎?有什麼好處?下面是文章查詢:有人可以用下面的例子來解釋Linq中的Query Reshaping嗎?

var genreModel = storeDB.Genres 
         .Include("Albums") 
         .Single(g => g.Name == genre); 

該文章指出:

實體框架功能,它允許我們指定我們想要加載以及其他相關實體,稱爲查詢結果整形。我們希望加載匹配的類型的專輯,因此我們將從Genres.Include(「專輯」)進行查詢以表明我們也希望相關專輯。這樣更有效率,因爲它會在單個數據庫請求中檢索我們的流派和唱片集數據。

我有點理解上面作者的說法,但覺得我需要一個更好的例子或解釋,特別是因爲我從來沒有使用過的包含方法。

回答

2

如果您檢查生成的SQL中,你會發現,相冊表中加入它應該是這個樣子:

SELECT [t0].*, [t1].* 
FROM Genres [t0] 
LEFT JOIN Albums [t1] ON [t0].GenreId = [t1].GenreId 
WHERE [t0].Name == @p0 

當結果返回給客戶端,ObjectContext的將轉向行列形狀轉化爲流派和專輯的實例。這些實例將在層次上相關 - 單一流派及其所有專輯。

假設這個流派有5個專輯。該查詢將返回5行。對象上下文將創建一個流派實例(5行中的每一行具有相同的流派主鍵值)。

相關問題