我有一个嵌套类:
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,但我还没有真正理解这个:)
所以任何帮助都会非常受欢迎。
答案 0 :(得分:2)
你是对的,你需要递归:
8
要获取所有名称,您可以投射结果:
public IEnumerable<Item> GetAllChildren(Item item)
{
return item.Children.Concat(item.Children.SelectMany(GetAllChildren));
}