如何分组分组列表?

时间:2015-02-06 20:17:26

标签: c# list linq linq-group

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

2015

<2月

第1条标题

第2条标题

1月

第3条标题


2014

12月

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

我希望按年份分组列表,其中包含按月分组的列表

2 个答案:

答案 0 :(得分:5)

假设您拥有ArticleYearMonth属性,我们会这样做:

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

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

答案 1 :(得分:1)

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