当前位置:  开发笔记 > 编程语言 > 正文

Linq递归亲子

如何解决《Linq递归亲子》经验,为你挑选了1个好方法。

我有来自数据库的数据:

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级(如树).

还有其他最佳方法吗?或者如何修改该解决方案

提前致谢



1> Magnus..:

对于linq-to-objects,您可以定义自己的扩展方法IEnumerable,递归获取所有子项.

public static class EnumerableExtensions
{
    public static IEnumerable SelectRecursive(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();

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有