检索所有子项及其子项,递归SQL

Fil*_*erg 5 .net sql linq linq-to-entities entity-framework

考虑数据库中的以下行:

Id      |   Parent
__________________
1           null
2           1
3           2
4           3
5           null
6           5
Run Code Online (Sandbox Code Playgroud)

每个Id有一个null Parent是"所有者"/"超级父母".

收集父母及其子女的最佳方法,表现明智是什么?我应该使用LINQ还是存储过程

我想要最终的结果IEnumerable<IEnumerable<int>>.

And*_*mar 10

在SQL中,您可以使用CTE进行查询.例如,要检索其父级和树中最高父级的节点列表:

declare @t table (id int, parent int)
insert @t (id, parent) values (1, null), (2,1), (3,2), (4,3), (5,null), (6,5)

; with cte as (
    select  id, parent, id as head
    from    @t
    where   parent is null
    union all
    select  child.id, child.parent, parent.head
    from    @t child
    join    cte parent
    on      parent.id = child.parent
)
select  *
from    cte
Run Code Online (Sandbox Code Playgroud)

这给出了:

id  parent  head
1   NULL    1
2   1       1
3   2       1
4   3       1
5   NULL    5
6   5       5
Run Code Online (Sandbox Code Playgroud)

请注意,我更改了您的示例数据,因此第2行不再是其自身的子项,而是第1行的子项.