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

时间:2011-06-13 16:24:35

标签: c# sql linq

假设我有一个这样的数据集:

PersonId  |   ManagerId  |  DepartmentId
========================================

1             null          1
2             1             1
3             1             2
4             2             1

等等。

我正在寻找一个Linq查询:

  

给出 ManagerId 和一组    DepartmentIds 会给我所有   相关的 PersonIds 。查询应该   在经理下面返回所有PersonIds ,   一直到树下,不只是   紧接那位经理的人。

以下是我到目前为止所尝试的内容:http://pastebin.com/zF9dq6wj

谢谢! 克里斯。

2 个答案:

答案 0 :(得分:5)

使用Linq,没有多次自动方式(我听说过)没有多次访问数据库。因此,它与任何其他递归调用结构没有什么不同,您可以在递归方法调用之间选择,一段时间使用System.Collections.Queue(或Stack)对象进行ID等。如果您的后端数据库是SQL Server 2008或更高,你可以利用它的递归查询功能,但你必须调用一个sproc来做它,因为Linq将无法自己进行翻译。

答案 1 :(得分:1)

您无法在Linq2SQL或Linq2Entities中执行递归查询。我建议用CTE编写一个View并将其添加到DataContext文件中。