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

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你目前拥有的东西。 由于IGroupingGroupBy的返回类型,实现IEnumerable再次使用GroupBy【参考方案2】:

假设您有一个具有YearMonth 属性的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()
                                                         )
                                 );

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

【讨论】:

以上是关于如何对分组列表的列表进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何对“x”列表框项目进行分组并添加到另一个列表框?

如何根据某些文本标准对元组列表进行分组/存储?

如何通过第一个元素对列表内的列表进行分组?

Flutter如何根据某个值从firebase对列表进行分组

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

Python:如何按对象的特征或属性对对象列表进行分组? [复制]