从数据库中选择时包括子孙

时间:2014-01-03 14:04:51

标签: entity-framework linq-to-sql

我有以下型号

public class Parent
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual List<Child> Child { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual List<GrandChild> GrandChild { get; set; }
}

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

我现在要做的是从数据库中选择子女和孙子的父母列表。

在没有快乐的情况下尝试以下事项:

List<Parent> parent = new List<Parent>();
parent = db.parent.ToList();

2 个答案:

答案 0 :(得分:4)

使用Include方法:

parent = db.parent.Include(parent => parent.Child.Select(child => child.GrandChild)).ToList();

对于旧版本的Entity Framework,您必须使用字符串而不是lambda表达式:

parent = db.parent.Include("Child.GrandChild").ToList();

或者您可以使用我在博客上发布的关于here的自定义Include扩展程序。

答案 1 :(得分:0)

在Linq to Sql中你应该使用DataLoadOptions

var dlo = new DataLoadOptions();

dlo.LoadWith<Parent>(p => p.Child );
dlo.LoadWith<Child>(c=> c.GrandChild );
db.LoadOptions = dlo;

List<Parent> parent = new List<Parent>();
parent = db.parent.ToList();