給定一個EmployeeId,我該如何構建一個Linq to Sql查詢來查找所有員工的祖先?每個EmployeeId都有一個關聯的SupervisorId(見下文)。Linq to Sql - 查找祖先的分層查詢
例如,EmployeeId 6(Frank Black)的祖先查詢應返回Jane Doe,Bob Smith,Joe Bloggs和Head Honcho。
如有必要,我可以緩存所有員工的列表以提高性能。
UPDATE:
我創建了以下粗略的方法來完成任務。它遍歷僱員。監督者關係一直到根節點。但是,這將爲每位員工發出一次數據庫調用。任何人都有更簡潔或更高效的方法?謝謝。
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;
}