繁体   English   中英

在 EF 查询中包含孙子

[英]Include Grandchildren in EF Query

给定对象层次结构

public class Parent
{
    public int Id { get; set; }
    public virtual Child Child { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public virtual GrandChild GrandChild { get; set; }
}

public class GrandChild
{
    public int Id { get; set; }
}

和数据库上下文

public class MyContext : DbContext
{
    public DbSet<Parent> Parents { get; set; }
}

可以使用 Lambda 语法( using System.Data.Entity )包括子孙后代,如下所示:

using (MyContext ctx = new MyContext())
{
    var hierarchy = 
        from p in ctx.Parents.Include(p => p.Child.GrandChild) select p;
}

如果类名随后被更改,Lambda 语法可防止中断查询。 但是,如果Parent有一个像这样的ICollection<Child>

public class Parent
{
    public int Id { get; set; }
    public virtual ICollection<Child> Children { get; set; }
}

Lambda 语法不再有效。 相反,可以使用字符串语法:

var hierarchy = from p in ctx.Parents.Include("Children.GrandChild") select p;

字符串语法是唯一的选择,还是在这种情况下有其他方法可以使用 Lambda 语法?

当然,你可以

var hierarchy = from p in ctx.Parents
                    .Include(p => p.Children.Select(c => c.GrandChild))
                select p;

参见MSDN ,标题备注,第五个项目符号。

更新:如果您使用Entity Framework Core ,则应使用以下语法

var hierarchy = from p in ctx.Parents
                    .Include(p => p.Children)
                    .ThenInclude(c => c.GrandChild)
                select p;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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