我有来自数据库的数据:
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
我得到了解决方案:递归LINQ查询:选择项目和所有子女孩子
但不幸的是结果只有两个级别,因为我希望结果处于多级> 2级(如树).
还有其他最佳方法吗?或者如何修改该解决方案
提前致谢
对于linq-to-objects,您可以定义自己的扩展方法IEnumerable
,递归获取所有子项.
public static class EnumerableExtensions { public static IEnumerableSelectRecursive (this IEnumerable source, Func > 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();