我的数据库中有两个表格采用1:N关系,我想用急切的加载进行左连接查询。
我的表是:
嗯,在一个视频中,我可以有很多版本(DVD,Blu-Ray等),只有一个版本可以属于视频。
我想获得我所拥有的所有视频至少一个可用版本(也许某些版本拥有一位朋友)。
我想获得至少具有可用版本的所有视频,但是对于这些视频我想要所有版本,可用且不可用。
因此,第一步是了解所有至少具有可用版本的视频,第二步是获取所有视频及其所有版本(可用且不可用)。
我想用原始的sql但是如何不能使用原始sql的eager加载,我想使用linq。
我想使用预先加载只对数据库使用一个查询而不是很多,因为我想在视频实体中填充其版本的集合版本。
感谢。
答案 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。