【问题标题】: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 还没有发布。

标签: c# list linq linq-group


【解决方案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()
                                                         })
                                 });

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多