Linq递归父级子级 [英] Linq recursive parent child
本文介绍了Linq递归父级子级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我从数据库中获得了这样的数据:
I have data from database like that :
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进行处理,应该是这样的结果:
I want to process using Linq, and it should be result like this :
Record 1
- Record 2
- Record 4
Record 3
- Record 5
我得到了解决方案:递归LINQ查询:选择项目以及所有有子孩子的孩子
但是不幸的是,结果只有两个级别,因为我想要的结果是> 2个级别的多级(像一棵树).
but unfortunately the result only has two level, because i want the result in multi level > 2 levels (like a tree).
还有其他最佳解决方案吗?或如何修改该解决方案
Any other best solution ? or how to modification that solution
预先感谢
推荐答案
对于linq-to-objects,您可以在IEnumerable<T>
上定义自己的扩展方法,该方法递归地获取所有子级.
For linq-to-objects you can define your own extension method on IEnumerable<T>
that recursively gets all children.
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();
这篇关于Linq递归父级子级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文