Учитывая EmployeeId, как я могу создать запрос Linq to Sql, чтобы найти всех предков сотрудника? Каждый EmployeeId имеет связанный SupervisorId (см. Ниже).
Например, запрос предков для EmployeeId 6 (Фрэнк Блэк) должен вернуть Джейн Доу, Боба Смита, Джо Блоггса и Хончо Хед.
При необходимости я могу кэшировать список всех сотрудников для повышения производительности.
UPDATE:
Я создал следующий грубый метод для выполнения задачи. Он пересекает отношения employee.Supervisor вплоть до корневого узла. Однако это вызовет один вызов базы данных для каждого сотрудника. У кого-нибудь есть более сжатый или более эффективный метод? Спасибо.
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;
}