我有这样的数据库数据:
id | description | parent_id
-----------------------------------------
1 | Record 1 | null
2 | Record 2 | 1
3 | Record 3 | null
4 | Record 4 | 2
5 | Record 5 | 3
我想用Linq处理,结果应该是这样的:
Record 1
- Record 2
- Record 4
Record 3
- Record 5
我得到了解决方案:Recursive LINQ query: select item and all children with subchildren
但不幸的是,结果只有两层,因为我想要多层> 2层的结果(就像一棵树)。
还有其他最佳解决方案吗?或者如何修改该解决方案
提前致谢
最佳答案
对于 linq-to-objects,您可以在 IEnumerable<T>
上定义自己的扩展方法递归地获取所有 child 。
public static class EnumerableExtensions
{
public static IEnumerable<T> SelectRecursive<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector)
{
foreach (var parent in source)
{
yield return parent;
var children = selector(parent);
foreach (var child in SelectRecursive(children, selector))
yield return child;
}
}
}
用法:
var lookup = col.ToLookup(x => x.Parent_Id);
var res = lookup[null].SelectRecursive(x => lookup[x.Id]).ToList();
关于c# - Linq递归父子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608665/