【发布时间】:2011-06-02 01:53:57
【问题描述】:
假设我有这个简单的结构
class FooDefinition
{
public FooDefinition Parent { get; set; }
}
class Foo
{
public FooDefinition Definition { get; set; }
}
class Bar
{
public ICollection<Foo> Foos { get; set; }
}
Bar 有一个 Foos 列表,可以是简单的(无父/子关系)或仅嵌套一层(即父 Foo 有许多子 Foos)。从这里可以看出,关系是在FooDefinition 中指定的,而不是Foo itself。
我需要做的是生成一个按此层次结构正确分组的Foos 列表。考虑以下源数据:
var simpleDefinition = new FooDefinition();
var parentDefinition = new FooDefinition();
var childDefinition = new FooDefinition { Parent = parentDefinition };
var bar = new Bar { Foos = new[]
{
new Foo { Definition = simpleDefinition },
new Foo { Definition = parentDefinition },
new Foo { Definition = childDefinition }
}};
我想和他们的孩子一起收集顶级物品。一个合适的数据结构可能是IEnumerable<IGrouping<Foo, Foo>>。
结果如下:
- 第 1 项(简单)
- 项目 2(父)
- 第 3 项(儿童)
当然,我想用纯功能的 Linq 查询来做到这一点。我做了很多这些,但今天我的大脑似乎卡住了。
【问题讨论】:
-
@Daniel 感谢您的编辑;我无意中留下了原来的名字。
-
没问题。在评论我的答案之前请稍候。我已经发现了它的问题。
-
修正了我的答案。请看一看。
标签: c# linq-to-objects