我有一份简单的人员名单List<Person>
public class Person
{
public int Id { get; set; }
public int ParentId { get; set; }
public List<Person> Childs { get; set; }
}
因此我想对其进行排序,以获得没有ParentId
的人员列表,并将所有人的所有孩子添加到他的Childs
。我不知道怎么做,有什么提示吗?
答案 0 :(得分:1)
我不确定你要求的是什么,但似乎你正试图从Person
的单一列表中获得树状结构。
var dict = source.ToDictionary(x => x.Id);
foreach(var p in source)
if(p.ParentId != 0)
dict[p.ParentId].Childs.Add(p);
var topLevel = source.Where(p => p.ParentId == 0).ToList();
我认为ParentId == 0
表示没有父级,该项目是顶级项目。
答案 1 :(得分:1)
这应该是一种享受:
var lookup = people.ToLookup(p => p.ParentId);
foreach (var person in people)
{
person.Childs = lookup[person.Id].ToList();
}
如果Childs
集合已经实例化,请使用:
person.Childs.AddRange(lookup[person.Id]);