【发布时间】:2015-04-07 05:46:23
【问题描述】:
我有一个简单的人员层次结构(EntityFramework Codefirst)。
public class Person
{
[Key]
public int Id { get; set; }
public int? ParentId { get; set; }
[Required]
public string Name { get; set; }
// Navigation
[ForeignKey("ParentId")]
public virtual Person Parent { get; set; }
public virtual ICollection<Person> Children { get; set; }
}
我的目标:
我需要一个创建List<Person> 的方法,它 (1) 由父母聚集和 (2) 按名称按字母顺序排序在每个级别:
示例输出:
- 阿尔弗雷德
- 本(阿尔弗雷德的儿子)
- 马里昂(阿尔弗雷德的女儿)
- 拉尔夫(阿尔弗雷德的儿子)
- 克里斯汀
- Ally(克里斯汀的女儿)
- 戴夫
- 多丽丝
- 詹姆斯(多丽丝的儿子)
- 克拉斯(多丽丝的儿子)
Alfred、Christine、Dave 和 Doris 都是父母。它们按字母顺序排序。他们都有孩子(戴夫除外)。孩子也按字母顺序排序(在列表中,他们与父母一起“分组”)。 “儿子”和“女儿”对你们来说只是 cmets(我在结果列表中不需要这个)。
我可以使用嵌套循环轻松创建这种列表。但我确信这不会非常有效或优雅。但也许我错了。
你们有没有人有好的想法/建议(可能是 LINQ)?谢谢!!
哦,我应该提一下,层次结构只有 2 级。所以,只有父母和孩子(但没有孙子)。
【问题讨论】:
标签: c# linq ef-code-first