Étant donné un EmployeeId, comment puis-je construire une requête Linq to Sql pour trouver tous les ancêtres de l'employé? Chaque EmployeeId a un SupervisorId associé (voir ci-dessous). Par exemple, une requête des ancêtres de EmployeeId 6 (Frank Black) doit renvoyer Jane Doe, Bob Smith, Joe Bloggs et Head Honcho.Linq to Sql - Requête hiérarchique pour trouver des ancêtres
Si nécessaire, je peux mettre en cache la liste de tous les employés pour améliorer les performances.
MISE À JOUR:
J'ai créé la méthode brute suivante pour accomplir la tâche. Il traverse la relation employee.Supervisor jusqu'au noeud racine. Cependant, cela lancera un appel de base de données pour chaque employé. Quelqu'un a une méthode plus succincte ou plus performante? Merci.
private List<Employee> GetAncestors(int EmployeeId)
{
List<Employee> emps = new List<Employee>();
using (L2STestDataContext dc = new L2STestDataContext())
{
Employee emp = dc.Employees.FirstOrDefault(p => p.EmployeeId == EmployeeId);
if (emp != null)
{
while (emp.Supervisor != null)
{
emps.Add(emp.Supervisor);
emp = emp.Supervisor;
}
}
}
return emps;
}