繁体   English   中英

跨多个关系级别的实体框架查询

[英]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;

注意AListList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM