Linq递归父级子级 [英] Linq recursive parent child

查看:228
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆