18

我試圖在一次調用中急切地加載所有相關實體或實體集合。 我的實體是這樣的:使用實體框架加載嵌套實體/集合

Class Person 
{ 
    public virtual long Id { get; set; } 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

Class Employee 
{ 
    public virtual long Id { get; set; } 
    public DateTime AppointmentDate { get; set; } 
    public virtual ICollection<EmployeeTitle> Titles { get; set; } 
    public virtual Person Person { get; set; } 
} 

Class EmployeeTitle 
{ 
    public virtual long Id { get; set; } 
    public virtual bool IsCurrent { get; set; } 
    public virtual Title Title { get; set; } 
} 
Class Title 
{ 
    public virtual long Id { get; set; } 
    public virtual string Code { get; set; } 
    public virtual string Description { get; set; } 
} 

什麼蔭試圖做的是,如果我打電話給加載所有員工的方法,其結果應包括人,EmployeeTitles包括標題 代碼和說明的名單我已經能夠以達到第三級即獲得員工與員工和EmployeeTitle列表。我不知道如何使用EmployeeTitle獲得標題信息。 我的代碼來獲得這樣的:

Context.Employees.Include("Person").Include(e => e.Titles).ToList(); 

請闡明如何做到這一點一些輕。提前致謝。

回答

40

你可以試試這個:

Context.Employees 
    .Include(e => e.Person) 
    .Include(e => e.Titles.Select(t => t.Title)) 
    .ToList(); 

Select可以應用到對象圖中下一級的集合,並加載導航屬性。

+0

完美:)非常感謝。 – Amit

+8

重要提示:不要爲兩個lambda表達式'.Include(x => x.Titles.Select(x => x.Title))''使用相同的變量',否則您將得到'無法將lambda表達式轉換爲類型'字符串',因爲它不是委託類型' –

+4

您必須具有「使用System.Data.Entity」,否則會出現此超載不存在的情況。 –

3

由於這是我在谷歌搜索的第一頁,我只是想發佈這個。

Slauma的回答很好。但如果你不打算實際使用列表,建議使用Load()而不是ToList()。所以它會是:

Context.Employees 
     .Include(e => e.Person) 
     .Include(e => e.Titles.Select(t => t.Title)) 
     .Load();