考虑数据库中的以下行: Id | Parent__________________1 null2 13 24 35 null6 5 具有空Parent的每个Id是“Owner”/“Super Parent”. 收集父母及其子女的最佳方法,表现明智是什么?我应该使用LINQ还是存储
Id | Parent __________________ 1 null 2 1 3 2 4 3 5 null 6 5
具有空Parent的每个Id是“Owner”/“Super Parent”.
收集父母及其子女的最佳方法,表现明智是什么?我应该使用LINQ还是存储过程?
我希望最终结果是IEnumerable< IEnumerable< int>>.
在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
这给出了:
id parent head 1 NULL 1 2 1 1 3 2 1 4 3 1 5 NULL 5 6 5 5
请注意,我更改了您的示例数据,因此第2行不再是其自身的子项,而是第1行的子项.
