2011-01-07 10 views
1

Ich habe eine Tabelle von Mitarbeitern. Jeder Mitarbeiter hat einen Manager und jeder Manager hat einen Manager und so weiter. Also für einen Manager möchte ich eine Abfrage durchführen, so dass ich alle meine Teammitglieder habe, und ich habe alle ihre Teammitglieder und so weiter. Was ist der beste Weg, dies in einer EF Linq-Anweisung zu tun. Idealerweise möchte ich eine Liste der Mitarbeiter und weiß, in welchem ​​Team sie sich befinden.Wie selbstreferenzierende Tabelle

Antwort

2

Ich bin nicht 100% sicher, wie Sie das in EF lösen, und ich denke, es könnte viele Fragen (eine für jeden Manager) wenn du Pech hast). Wie ich es tun würde, ist es mit Ihrem Top-Mitarbeiter zu beginnen und alle Mitarbeiter, die diesen Manager als Manager hat. Dann würde ich rekursiv alle Manager in der Menge der Mitarbeiter nehmen, die Sie gerade bekommen haben und ihre IDs extrahieren. Wenn Sie alle IDs haben, können Sie die DB für Mitarbeiter abfragen, die eine der IDs als ihren Manager haben.

Haben Sie meinen Standpunkt verstanden? Dies führt zu einer Abfrage pro Ebene anstelle einer Abfrage pro Manager. Aber vielleicht löst EF dieses Problem, da bin ich mir nicht sicher. Aber ich denke, Sie müssen es rekursiv tun.

Ich würde darauf abzielen, für so etwas wie:

public IList<Employees> GetEmployeesForManager(int managerId) 
{ 
    return GetEmployeesForManagers(new List<int>() { managerId }); 
} 

public IList<Employees> GetEmployeesForManagers(IList<int> managerIds) 
{ 
    var listOfEmployees = // Get the employees 
    var listOfManagers = listOfEmployees.Where(y => y.IsManager).Select(y => y.Id).ToList(); 
    if(listOfManagers.Count >= 0) 
     listOfEmployees.AddRange(GetEmployeesForManagers(listOfManagers)); 
    return listOfEmployees; 
} 
+0

ich um mit Google gesucht haben und Sie können richtig sein. – arame3333

+0

Und dann würde ich definitiv für meine Lösung gehen :). Ich schätze, du kannst es mit einigen sehr komplizierten Lambdas machen, aber was ist der Punkt, an dem du es einfach halten kannst? Diese Lösung garantiert, dass Sie mehr Abfragen haben möchten als in Ihrer Organisation. –

+0

Der Code muss aufgeräumt werden. Wenn Sie zur Sammlung hinzufügen, sollten Sie die AddRange-Methode verwenden – arame3333

Verwandte Themen