c# - LINQ - Group List<T> 到年、月、日

标签 c# linq date linq-group

我有一个简单的列表

  • T.Date = 11/04/2014, T.Title = "Book1", T.Tipology = "Book"
  • T.Date = 14/04/2014, T.Title = "Book2", T.Tipology = "Book"
  • T.Date = 02/05/2015, T.Title = "Spot1", T.Tipology = "Spot"
  • T.Date = 21/06/2015, T.Title = "Newspaper1", T.Tipology = "Newspaper"

我需要按年、月、日对列表进行分组,如下所示:

  • 2014
    • April
      • T.Date = 11/04/2014, T.Title = "Book1", T.Tipology = "Book"
      • T.Date = 14/04/2014, T.Title = "Book2", T.Tipology = "Book"
  • 2015
    • May
      • T.Date = 02/05/2015, T.Title = "Spot1", T.Tipology = "Spot"
    • June
      • T.Date = 21/06/2016, T.Title = "Newspaper1", T.Tipology = "Newspaper"

所以我将能够在 foreach 函数中处理数据,例如:

 foreach(var year in Year)
 {
     foreach(var month in Month)
     {
         foreach(var day in Day)
         {
            Console.WriteLine(day.Item.Title);
            Console.WriteLine(day.Item.Tipology);
         }
         Console.WriteLine(month.ToString()); // With culture
     }
     Console.WriteLine(year.ToString());
 }

我如何使用 (c#) LINQ 做到这一点?

最佳答案

您可以按年、月、日排序:

var sorted = list.OrderBy(x=>x.Date.Year)
                 .ThenBy(x=>x.Date.Month)
                 .ThenBy(x=>x.Date.Day);

如果你真的想对它们进行分组,那么你可以这样做:

var result = from l in list
             group l by new { l.Date.Year,l.Date.Month} into g 
             select new
                   {
                     Year = g.Key.Year,
                     Month = g.Key.Month,
                     Items = g.ToList()
                    };

因此它将为您提供每年月份日期的分组数据

关于c# - LINQ - Group List<T> 到年、月、日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026388/

相关文章:

c# - 为存储过程创建可重用的 Linq To SQL

javascript - 缺少时区的日期解析不一致

c# - 我想将现有的 List<T> 保存到 c# 中的 XML 文件中

c# - 为什么 .NET "de-CH"区域性数字组分隔符在本地和 Azure 上不同?

c# - 使用 C# 获取 Int/short/byte 结构字节表示

c# - Visual Studio 部署包更改文件权限

c# - Linq Exception 表达式必须是 MemberExpression

java - 解析时间戳包含时区到Date对象后,Date对象是否包含时区信息

java - 如何使用 "ff"在 Java 中格式化日期?

c# - Rhino Mocks 示例如何模拟属性