如何对分组列表的列表进行分组?

How to group a list of grouped lists?

我需要一个分组列表的分组列表;我有一堆文章需要按年分组,并在每年内按月分组。它在页面上看起来像这样:

2015

二月

第 1 条标题

第 2 条标题

1 月

第 3 条标题


2014

十二月

第 4 条标题


我知道如何得到一个分组列表,比如

var yearList = articles.GroupBy(x => x.Year);

但是我怎样才能对一组列表进行分组呢?

这是我的文章class:

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; }
}

我想要一个按年分组的列表,其中包含按月分组的列表

序列中的每个项目都是一个组,要将序列中的每个项目转换为其他项目,请使用 Select。在 Select 中,您需要将每个组转换为一系列组。要实际将一组转换为一组序列,请使用 GroupBy.

假设您有一个具有 YearMonth 属性的 Article class,这将执行:

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()
                                                         })
                                 });

将月份分组转换为匿名类型当然不是必需的,但可以更清楚地了解您在结果中实际得到的内容。