我有以下基本课程(减少这个问题):
public class Parent
{
public string Name { get; set; }
public IList<Child> Children { get; set; }
}
public class Child
{
public string Name { get; set; }
}
如果我有一个Parent集合,我想要做的是获取一个按Parent.Name排序的IList,并且每个父节点的Children需要按其Name排序。
我试过这个(只对父母而不是孩子进行分类):
IList<Parent> parents = ... //Populated
parents.OrderBy(p => p.Name).ThenBy(p => p.Children.OrderBy(c => c.Name)).ToList()
我搜索过但找不到任何东西(可能是我傻了)。
对Linq新手的任何建议?
提前致谢
安迪
答案 0 :(得分:4)
首先,按照您的方式调用列表中的OrderBy
,不会对其进行排序。它将返回一个新的已排序IEnumerable
;您可以使用.ToList()
将其转换为列表,但它仍然是副本。现在进行排序本身。您真的不仅需要对集合中的项目进行排序,还要复制每个项目的副本,这些项目的Children
也会排序。所以:
IList<Parent> 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();