c#flatten嵌套对象

时间:2017-02-14 11:20:03

标签: c# .net linq

我有一个嵌套类:

    class Item
    {
        public Int32 Id { get; set; }
        public Int32 Pid { get; set; }
        public String Name { get; set; }
        public IEnumerable<Item> Children { get; set; }

    }

现在我想要扁平化,这样我就能得到所有物品及其孩子的名字。

这里的问题是我不知道这有多少层次。

我看了一眼:

How to flatten nested objects with linq expression

如果您知道自己拥有多少级别,那就太棒了。

所以:

        var r = from b in items
                from c in b.Children
                from d in c.Children
                ...
                select new { b.Name, c = c.Name, d = d.Name ... };

完全符合我的需要,但我不知道我需要多少级别,如果一个项目没有孩子它也不会返回任何东西。

我想我需要一些递归例程,但我似乎无法找到它。 我看了IEnumerable,但我还没有真正理解这个:)

所以任何帮助都会非常受欢迎。

1 个答案:

答案 0 :(得分:2)

你是对的,你需要递归:

8

要获取所有名称,您可以投射结果:

public IEnumerable<Item> GetAllChildren(Item item)
{
    return item.Children.Concat(item.Children.SelectMany(GetAllChildren));
}