2014-01-03 3 views
3

У меня есть следующие моделиВключить ребенок и внук, выбирая из базы данных

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; } 
} 

Что Im пытается сделать сейчас, это выбрать список родителей из базы данных с детьми и внуками.

Пробовал следующее не радость:

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

ответ

4

Используйте Include метод:

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

Для более старых версий Entity Framework, вы должны использовать строку вместо лямбда-выражения:

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

Или вы можете использовать обычай Include extensi по методу, о котором я писал около here.

+0

Получить следующую ошибку не удается преобразовать лямбда-выражения к типу «строка», потому что это не тип делегата – Ernie

+0

@Ernie, вы, вероятно, использует старую версию EF. См. Мой обновленный ответ. –

+0

Пробовал с лямбда-выражениями на некоторое время и не мог понять, почему он не работает. Спасибо за помощь. – Ernie

0

в Linq к 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(); 
Смежные вопросы