EmployeeId が与えられた場合、Linq to Sql クエリを作成して従業員の先祖をすべて見つけるにはどうすればよいですか? 各 EmployeeId には、関連付けられた SupervisorId があります (以下を参照)。
たとえば、EmployeeId 6 (Frank Black) の祖先のクエリは、Jane Doe、Bob Smith、Joe Bloggs、および Head Honcho を返す必要があります。
必要に応じて、すべての従業員のリストをキャッシュして、パフォーマンスを向上させることができます。
アップデート:
タスクを達成するために、次の大まかなメソッドを作成しました。これは、employee.Supervisor 関係をルート ノードまでたどります。ただし、これは従業員ごとに 1 つのデータベース呼び出しを発行します。より簡潔またはよりパフォーマンスの高い方法を持っている人はいますか? ありがとう。
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;
}