2011-06-13 33 views
0

说我有一个数据集像这样:递归Linq查询 - 人>管理>部门

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

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

等。

我找了一个LINQ查询,该查询:

给出一个经理ID和一组 DepartmentIds会给我所有 相关PersonIds。查询应该 返回所有PersonIds下一个经理, 一路下来树,而不是只有 那些经理下。

这里是我试过到目前为止:http://pastebin.com/zF9dq6wj

谢谢! Chris。

+3

感叹。你试过了什么,那是怎么做的,你做了什么研究来试图找到解决方案等。 – 2011-06-13 16:27:31

+0

你的树有一个静态的3个级别? – Magnus 2011-06-13 16:31:14

+0

嗨,没有 - 理论上它可以有无限的水平。谢谢。 – christofr 2011-06-13 16:31:56

回答

5

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

1

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