2013-07-28 22 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