2016-06-08 88 views
2

我已經建立2級嵌套的LINQ查詢爲:LINQ的嵌套表3深

var data = (from p in Departments 
      join e in Employees on p.Id equals e.EmpId into emp 
      select new { p,emp }).ToList().Dump(); 

結果

Department - EmpName - EmpName Department - EmpName - EmpName

我需要添加另一個層面得到每個員工DateWorked名單。

這裏是最終的查詢結果應該什麼樣子:

Department - EmpName -DateWorked -DateWorked - EmpName -DateWorked -DateWorked Department - EmpName -DateWorked -DateWorked - EmpName -DateWorked -DateWorked

我如何添加到我目前的查詢來獲取使用LINQ第三嵌套列表?

回答

2

你可以做一個內部查詢:

var data = (
from p in Departments 
join e in Employees on p.Id equals e.DeptId into emp 
select new {p, employees=(from s in emp 
          join d in DateWorked on s.Id equals d.EmpId into dts 
          select new {s, dts}) 
      }).ToList().Dump(); 
1

你可以設置你的navigation properties,然後只需查詢告訴它你想要什麼:

var data=db.Departments 
    .Include(d=>Employees) 
    .Include(d=>Employees.Select(e=>e.DatesWorked)) 
    .ToList(); 
+0

嗯,這是假設的OP使用EF;)。另一件事是第一個包含沒有必要,第二個包含導航屬性。 – octavioccl

+0

@octavioccl是的,第二個'.Include'確實包含了兩者,但我通常提到兩者。它清楚地表明瞭我在尋找什麼,並且我發現它更易於維護。例如,如果我們不再需要DatesWorked,那麼只需刪除那些包含僱員的代碼,然後代碼就會中斷(或導致1 + N查詢)。 LINQ2SQL與'LoadWith'具有類似的功能,nHibernate具有'Fetch'。 –