![](/img/trans.png)
[英]Dynamic Linq - how do you sort a collection by Enum property alphabetically?
[英]How do you sort a parent and child collection using Linq?
我有以下基本课程(针对这个问题进行了缩减):
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,并且每个父项的子项也需要按其名称排序。
我试过这个(它只对父母进行排序,而不是对孩子进行排序):
IList<Parent> parents = ... //Populated
parents.OrderBy(p => p.Name).ThenBy(p => p.Children.OrderBy(c => c.Name)).ToList()
我已经搜索过但找不到任何东西(可能是我很笨)。
对 Linq 新手有什么建议吗?
提前致谢
安迪
首先,以这种方式调用列表中的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();
相同的解决方案,使用 LINQ 方法语法:
IList<Parent> parents = ... //Populated
var sortedList = parents.OrderBy(p => p.Name).Select(p =>
{
p.Children = p.Children.OrderBy(c => c.Name);
return p;
}).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.