如何对嵌套项进行排序?

时间:2014-03-01 00:50:41

标签: c# linq sorting

我有一份简单的人员名单List<Person>

public class Person
{
    public int Id { get; set; }

    public int ParentId { get; set; }

    public List<Person> Childs { get; set; }
}

因此我想对其进行排序,以获得没有ParentId的人员列表,并将所有人的所有孩子添加到他的Childs。我不知道怎么做,有什么提示吗?

2 个答案:

答案 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]);