Linq recursive parent child

谁说胖子不能爱 提交于 2020-01-12 03:53:09

问题


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

I want to process using Linq, and it should be result like this :

Record 1
- Record 2
  - Record 4
Record 3
- Record 5

I got solution : Recursive LINQ query: select item and all children with subchildren

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

Thanks in advance


回答1:


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;
        }
    }
}

Usage:

var lookup = col.ToLookup(x => x.Parent_Id);
var res = lookup[null].SelectRecursive(x => lookup[x.Id]).ToList();


来源:https://stackoverflow.com/questions/41608665/linq-recursive-parent-child

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!