给定一个 EmployeeId,我如何构造一个 Linq to Sql 查询来查找该员工的所有祖先?每个 EmployeeId 都有一个关联的 SupervisorId(见下文)。
例如,对 EmployeeId 6 (Frank Black) 的祖先的查询应返回 Jane Doe、Bob Smith、Joe Bloggs 和 Head Honcho。
如有必要,我可以缓存所有员工的列表以提高绩效。
更新:
我创建了以下粗略的方法来完成任务。它遍历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;
}