2017-04-26 5 views
3

Ich versuche, zwei Tabellen Mitarbeiter und Abteilung mit LINQ zu verbinden und versuchen, Ergebnisse in unten angegebenen Bildformat zu erhalten. Kann jemand helfen, wie man das erreicht?Abrufen von Mitarbeitern in jeder Abteilung mit LINQ LAMBDA

enter image description here

, wie Mitarbeiter in den einzelnen Abteilungen zu erreichen.

Hier ist mein Code

var EmpList = (from d in Department 
join e in Employee on d.ID equals e.ID 
select new 
{ 
    ID = d.ID, Name = d.Name, Location = d.location, Employess = 
    e.FirstName, e.LastName, e.Gender 
}); 

Der obige Code nicht vollständig geschrieben. Ich bekomme keine Ideen, wie ich das erreichen kann.

var elist = from d in db.Departments 
        join e in db.Employees on d.ID equals e.ID 
        group d by e.DepartmentId into g 
        select new { Details = g }; 
+0

Was ist falsch an Ihrem Code? – dotNET

+0

Ändern Sie Ihre Joins auf Bedingung zu d.ID gleich e.DepartmentID und schreiben groupby d.Name –

+0

Vielleicht hilft dieser Artikel? http://stackoverflow.com/questions/7325278/group-by-in-linq – ReRoute

Antwort

1

Unter der Annahme, dass Sie eine Struktur wie dieses:

var depts = new[] { 
    new Dept { ID = 1, Name = "IT", Location = "New York" }, 
    new Dept { ID = 2, Name = "HR", Location = "London" }, 
    new Dept { ID = 3, Name = "Payroll", Location = "Sydney" } 
}; 

var employees = new[] { 
    new Employee { ID = 1, FirstName = "Mark", DeptID = 1 }, 
    new Employee { ID = 2, FirstName = "Steve", DeptID = 3 }, 
    new Employee { ID = 3, FirstName = "Ben", DeptID = 1 }, 
    new Employee { ID = 4, FirstName = "Philip", DeptID = 2 }, 
    new Employee { ID = 5, FirstName = "Mary", DeptID = 2 }, 
    new Employee { ID = 6, FirstName = "Valarie", DeptID = 3 }, 
    new Employee { ID = 7, FirstName = "John", DeptID = 1 } 
}; 

Sie können mit LINQ Join und GroupBy die gewünschten Daten erhalten:

var result = depts 
    .Join(employees.GroupBy(x => x.DeptID), dept => dept.ID, empGroup => empGroup.Key, 
     (dept, empGroup) => new { 
      Name = dept.Name, 
      Location = dept.Location, 
      Employees = empGroup.ToArray() 
     }); 

Oder das gleiche in SQL-ähnliche Syntax:

var result = from dept in depts 
      join empGroup in (
       from e in employees 
       group e by e.DeptID into g 
       select g 
      ) on dept.ID equals empGroup.Key 
      select new { 
       Name = dept.Name, 
       Location = dept.Location, 
       Employees = empGroup.ToArray() 
      }; 

Was thi tut tu das eigentlich?

  1. Mitarbeiter werden nach DeptID gruppiert.
  2. Abteilungen sind mit dieser Gruppierung verbunden und ergeben eine Sammlung von anonymen Objekten des gewünschten Formats. Natürlich können Sie eine stark typisierte Klasse verwenden.
+2

Sie scheinen die 'GroupJoin' neu zu erfinden :) –

+0

@IvanStoev Wow, yeah: D Danke, ich habe noch nie von dieser Methode gehört Vor. –

+0

Yeldar funktioniert wie erwartet Dank – Tronics