如何对分组列表的列表进行分组?
Posted
技术标签:
【中文标题】如何对分组列表的列表进行分组?【英文标题】:How to group a list of grouped lists? 【发布时间】:2015-04-07 02:01:13 【问题描述】:我需要一个分组列表的分组列表;我有一堆文章需要按年分组,并在每年内按月分组。它在页面上看起来像这样:
2015
二月
第 1 条标题
第 2 条标题
一月
第 3 条标题
2014
十二月
第 4 条标题
我知道如何获取一个分组列表,例如
var yearList = articles.GroupBy(x => x.Year);
但是我怎样才能对分组列表的列表进行分组呢?
这是我的文章类:
public class Article
public String Title get; set;
public String DateDisplay get; set;
public String MoreLink get; set;
public int Month get; set;
public int Year get; set;
我想要一个按年分组的列表,其中包含按月分组的列表
【问题讨论】:
可以发一下相关课程吗? 已编辑以包含我的文章类var yearList = articles.GroupBy(x => new x.Year, x.Month).GroupBy(x=> x.FirstOrDefault()?.Year);
@Bart 按月分组,按年分组,而不是相反。
@Bart 最后我检查了一下,C# 6.0 还没有发布。
【参考方案1】:
序列中的每个项目都是一个组,要将序列中的每个项目转换为其他内容,请使用Select
。在Select
中,您需要将每个组转换为一组组。要将一个组实际转换为一组组,请使用GroupBy
。
【讨论】:
我知道我需要使用 GroupBy。不过,我不知道如何在分组列表中使用 GroupBy。 @user3784238 我告诉过你具体方法;你打电话给Select
你目前拥有的东西。
由于IGrouping
,GroupBy
的返回类型,实现IEnumerable
再次使用GroupBy
。【参考方案2】:
假设您有一个具有Year
和Month
属性的Article
类,则可以这样做:
var perYearAndPerMonth = articles.GroupBy(a => a.Year)
.Select(yearGroup => new
Year = yearGroup.Key,
PerMonth = yearGroup.GroupBy(a => a.Month)
.Select(monthGroup => new
Month = monthGroup.Key,
Articles = monthGroup.ToList()
)
);
当然没有必要将月份分组转换为匿名类型,但可以更清楚地了解您在结果中实际得到的内容。
【讨论】:
以上是关于如何对分组列表的列表进行分组?的主要内容,如果未能解决你的问题,请参考以下文章