如何使用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();