如何过滤子实体,但所有人都急切加载?

时间:2013-07-28 10:07:12

标签: c#-4.0 entity-framework-5 eager-loading

我的数据库中有两个表格采用1:N关系,我想用急切的加载进行左连接查询。

我的表是:

  • 视频(IDVIdeo,名称......)
  • 版本(IDVersion,IDVideo,名称,Avaliable ......)

嗯,在一个视频中,我可以有很多版本(DVD,Blu-Ray等),只有一个版本可以属于视频。

我想获得我所拥有的所有视频至少一个可用版本(也许某些版本拥有一位朋友)。

我想获得至少具有可用版本的所有视频,但是对于这些视频我想要所有版本,可用且不可用。

因此,第一步是了解所有至少具有可用版本的视频,第二步是获取所有视频及其所有版本(可用且不可用)。

我想用原始的sql但是如何不能使用原始sql的eager加载,我想使用linq。

我想使用预先加载只对数据库使用一个查询而不是很多,因为我想在视频实体中填充其版本的集合版本。

感谢。

1 个答案:

答案 0 :(得分:1)

使用LINQ的解决方案非常简单,可能是:

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

如果你真的更喜欢原始SQL,你可以从这个LINQ查询中提取SQL:

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

修改

使用原始sql的查询很可能不会填充导航属性,因此似乎无法将其用于预先加载。请参阅答案及其评论中的讨论here