- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下基本类(class)(针对这个问题进行了缩减):
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 也需要按其名称排序。
我试过这个(只对 parent 进行排序,而不是对 child 进行排序):
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();
关于c# - 如何使用 Linq 对父集合和子集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1408331/
我以前使用过像 Netbeans 和 eclipse 这样的 IDE。 我在 friend 的电脑上下载了“Visual Studio Express 2013 for windows desktop
我正在尝试弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 GBA Exploader 和其他程序所做的事情。 如果我选择一个 block 并对其进
Filter1=re.findall(r'',PageSource) Filter2=re.findall(r'',PageSource) Filter3=re.findall(r'(.*?).*?'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是一名优秀的程序员,十分优秀!