如何使用Linq对父系和子系列进行排序?

我有以下基本课程(减少这个问题):

public class Parent { public string Name { get; set; } public IList Children { get; set; } } public class Child { public string Name { get; set; } } 

如果我有一个Parent集合,我想要做的是获取一个按Parent.Name排序的IList,并且每个父节点的Children需要按其Name排序。

我试过这个(只对父母而不是孩子进行排序):

 IList parents = ... //Populated parents.OrderBy(p => p.Name).ThenBy(p => p.Children.OrderBy(c => c.Name)).ToList() 

我搜索过但找不到任何东西(可能是我傻了)。

对Linq新手的任何建议?

提前致谢

安迪

首先,按照您的方式调用列表中的OrderBy不会对其进行排序。 它将返回一个新排序的IEnumerable ; 你可以使用.ToList()把它变成一个列表,但它仍然是一个副本。 现在进行排序本身。 你真的不仅需要订购集合中的项目,还要制作每个项目的副本,这些项目也会对其Children进行排序。 所以:

 IList parents = ... //Populated parents = (from p in parents orderby p.Name select new Parent { Name = p.Name, Children = p.Children.OrderBy(c => c.Name).ToList() } ).ToList();