考虑数据库中的以下行:
Id | Parent __________________ 1 null 2 1 3 2 4 3 5 null 6 5
每个Id具有的null Parent是“所有者” /“超级父代”。
Id
null
Parent
从表现的角度来看,收集父母和子女的最佳方法是什么?我应该使用 LINQ 还是 存储过程 ?
我希望最终结果是IEnumerable<IEnumerable<int>>。
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行的子级。