gpt4 book ai didi

.net - Linq to Sql - 查找祖先的分层查询

转载 作者:行者123 更新时间:2023-12-02 05:54:13 26 4
gpt4 key购买 nike

给定一个 EmployeeId,如何构建 Linq to Sql 查询来查找该员工的所有祖先?每个 EmployeeId 都有一个关联的 SupervisorId(见下文)。

例如,查询 EmployeeId 6 (Frank Black) 的祖先应返回 Jane Doe、Bob Smith、Joe Bloggs 和 Head Honcho。

如果有必要,我可以缓存所有员工的列表以提高性能。

更新:

我创建了以下粗略方法来完成任务。它遍历员工.主管关系一直到根节点。但是,这将为每位员工发出一次数据库调用。有人有更简洁或更高效的方法吗?谢谢。

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;
}

最佳答案

首先,欢迎您使用我的LINQ Extension Methods project中的分层查询。 。我认为可能有助于简化您的代码。

这里的问题是,这将为层次结构中的每个节点创建一个数据库调用。在您的示例中,您将需要 5 次往返数据库。

我会选择不同的路径并创建一个存储过程来为我执行此操作并返回整个 Employee 对象集。由于您在返回对象之前断开对象的连接(处理上下文),因此您可以简单地从存储过程的结果集创建新对象。

关于.net - Linq to Sql - 查找祖先的分层查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com