[英]Entity Framework query across multiple levels of relationship
我刚刚开始实体框架和Linq To Entities,我正试图了解我的问题。
我有一个数据结构如下:
表A,B,C。
A与B有一对多的关系,B与C有一对多的关系。
我们的一个演示文稿对象由A,B和C的数据组成,给出了来自C的Id
那么,我如何在查询中表示这一点?
如何从where c.Id == myParam
查询中获取A实体?
关于什么:
var c = context.Cs.Include("B.A").Where(c => c.Id == myParam).SingleOrDefault();
其中B
是导航属性上C
到的实例B
一个A
是导航属性从B
到的实例A
。
如果更新了System.Data.Entity命名空间,也可以使用lambda表示法:
var c = context.Cs.Include(i=>i.B.A).Where(c => c.Id == myParam).SingleOrDefault();
对于Collection导航属性,您可以使用.Select()
var c = context.Cs.Include(i=>i.Select(j=>j.A)).Where(c => c.Id == myParam).SingleOrDefault();
如果您确保加载对象A的所有引用以便可以访问它们,则以下内容有效。
var C = lstA.Where(p => pBFirstOrDefault()。C == cID);
你可以试试这个:
var temp = from a in AList
where a.B.All(b => b.C.All(c => c.ID== myParam))
select a;
注意AList
是List<A>
。
有很多方法可以用LINQ做事,有时候我发现如果我很难想出一个使用现有扩展方法组合的解决方案,我会简单地编写一个连接(就像在sql中一样) )使用LINQ。 下面的连接不需要实际的“连接”部分,因为EF将使用您现有的映射(导航属性)为您生成连接。
var query = from a in Ta
from b in Tb
from c in Tc
where C.Id == myParam
select new { A = a, B = b, C = c};
从这里你有一个匿名类型,其中包含来自所有三个表的数据。 最好的部分是EF会对您的对象进行自动修复,这意味着您只能从方法中返回A并能够遍历它以获得B和C.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.