c# flatten nested object
本问题已经有最佳答案,请猛点这里访问。
我有一个嵌套类:
1 2 3 4 5 6 7 8 | class Item { public Int32 Id { get; set; } public Int32 Pid { get; set; } public String Name { get; set; } public IEnumerable<Item> Children { get; set; } } |
现在我想把这个展平,这样我可以得到所有物品的名称和他们的孩子。
这里的问题是我不知道这有多深。
我看了一下:
如何用LINQ表达式展平嵌套对象
如果你知道你有多少个等级,这很好,我不知道。
所以:
1 2 3 4 5 | 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 2 3 4 | public IEnumerable<Item> GetAllChildren(Item item) { return item.Children.Concat(item.Children.SelectMany(GetAllChildren)); } |
要获取所有名称,可以投影结果:
1 | var allDescendantNames = GetAllChildren(item).Select(child => child.Name).ToList(); |