2016-06-08 14 views
2

Ich habe 2 Ebene verschachtelt Linq-Abfrage erstellt als:Linq Verschachtelte Liste 3 tief

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

Ergebnis

Department - EmpName - EmpName Department - EmpName - EmpName

Ich brauche eine weitere Ebene hinzuzufügen, je Mitarbeiter zu bekommen DateWorked Liste.

Hier ist, wie das Ende Abfrageergebnis aussehen sollte:

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

Wie kann ich meine aktuelle Abfrage fügen Sie die dritte verschachtelte Liste mit Linq zu bekommen?

Antwort

2

Sie können eine innere Abfrage tun:

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

Sie können Ihre navigation properties, einrichten und dann Abfrage nur um es zu sagen, was Sie wollen:

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

Nun, das ist die Annahme der OP verwendet EF;). Eine andere Sache ist das erste Include ist nicht notwendig, das zweite enthält beide Nav-Eigenschaften. – octavioccl

+0

@octavioccl Ja, das zweite '.Include' schließt implizit beide ein, aber normalerweise erwähne ich beides. Es macht deutlich, wonach ich suche, und ich halte es für aufrechterhaltbar. Wenn Sie beispielsweise DatesWorked nicht mehr benötigen, entfernen Sie einfach das Include. Wenn Sie davon abhängig sind, dass auch Mitarbeiter eingeschlossen sind, bricht der Code ab (oder verursacht eine 1 + N-Abfrage). LINQ2SQL hat ähnliche Fähigkeiten mit 'LoadWith', nHibernate mit' Fetch'. –

Verwandte Themen