2013-07-28 25 views
1

我在我的數據庫中有1:N關係中的兩個表,我想用加載的方式做一個左連接查詢。如何過濾子實體,但獲得所有的急切加載?

我的表是:

  • 影片(IDVIdeo,名稱...)
  • 版本(IDVersion,IDVideo,名稱,Avaliable ...)

那麼,在視頻我可以有許多版本(DVD,藍光...等),只有一個版本可以屬於視頻。

我想獲得所有我至少有一個可用版本的視頻(也許某些版本擁有一個朋友)。

我想獲得至少有可用版本的所有視頻,但是這些視頻我希望所有版本都可用,並且不可用。

因此,第一步是要知道所有視頻至少有一個可用版本,第二步是獲取所有視頻及其所有版本(可用且不可用)。

我想用原始的sql,但它是如何不可能使用原始sql的急切加載,我想用linq。

我想使用急切加載只使用一個查詢到數據庫,並不是很多,因爲我想用它的版本填充視頻實體中的集合版本。

謝謝。

回答

1

使用LINQ的解決方案是相當直接的和是:

var sql = context.Videos 
    .Include(v => v.Versions) 
    .Where(v => v.Versions.Any(vers => vers.Available)) 
    .ToString(); 

var videos = context.Videos 
    .Include(v => v.Versions) 
    .Where(v => v.Versions.Any(vers => vers.Available)) 
    .ToList(); 

如果你真的喜歡原始的SQL這個你可以從這個LINQ查詢提取SQL編輯

最有可能與原始sql的查詢不會填充導航屬性,所以它似乎不可能用於ea ger loading。在答案及其評論中查看討論here