递归Linq查询-Person>;经理>;部门

本文关键字:gt 经理 部门 Linq 查询 递归 -Person | 更新日期: 2023-09-27 17:58:57

假设我有这样的数据集:

PersonId  |   ManagerId  |  DepartmentId
========================================
1             null          1
2             1             1
3             1             2
4             2             1

等等

我正在寻找一个Linq查询,它:

给定一个ManagerId和一组部门ID将提供所有信息相关人员ID。查询应该return管理器下的所有PersonIds,一直到树下,不仅仅那些直接在经理手下的人。

以下是我迄今为止所做的尝试:http://pastebin.com/zF9dq6wj

谢谢!克里斯。

递归Linq查询-Person>;经理>;部门

使用Linq,如果不多次访问数据库,就没有自动的方法(我听说过)。因此,它实际上与任何其他递归调用结构都没有什么不同,您可以在递归方法调用之间进行选择,也可以使用System.Collections.Queue(或Stack)对象作为id等。如果您的后端数据库是SQL Server 2008或更高版本,则可以利用它的递归查询功能,但您必须调用存储过程才能完成,因为Linq本身无法进行翻译。

您不能在Linq2SQL或Linq2Entities中执行递归查询。我建议编写一个带有CTE的视图,并将其添加到DataContext文件中。