首页 > 解决方案 > 不能按年、月和日期分组 C#

问题描述

我想知道如何分别按年、月和日期对日期进行分组。

到目前为止,我设法按月份和日期分组,但是我在理解分组 ba 时遇到了一些麻烦

因此,我创建了几个代表日、月和年的类:

public class Day
{    
    public DateTime Date { get; set; }
}

public class Month
{
    public int MonthNumber { get; set; }
    public List<Day> Days { get; set; }
}

public class Year
{
    public int YearNumber { get; set; }
    public List<Month> Months { get; set; }
}

所以首先我得到了一系列日期并将它们添加到日期列表中。

var startDate = DateTime.Parse("12/08/2019");
var endDate = DateTime.Parse("01/03/2020");
var days = new List<Day>();
var months = new List<Month>();
var years = new List<Year>();
if (endDate >= startDate)
{
    for (var date = startDate; date <= endDate; date=date.AddDays(1))
    {
        var dayModel = new Day();
        dayModel.Date = date;
        days.Add(dayModel);
    }
}

然后我尝试按月对天进行分组并将它们添加到月份列表中:

var grouppedMonths = days.GroupBy(y => y.Date.Month).ToList();

foreach (var month in grouppedMonths)
{
    var monthModel = new Month();
    monthModel.Days = month.Select(d => d).ToList();
    months.Add(monthModel);
}

按月分组后,我想按年对实际结果进行分组。我试过这样的事情:

var grouppedYears = months.GroupBy(x => x.Days.Select(y => y.Date.Year));

但这对我不起作用。总的来说我想得到

标签: c#

解决方案


我猜你想要这个:

var results = days
    .GroupBy(d => d.Date.Year)
    .Select(y => new Year
    {
        YearNumber = y.Key,
        Months = y
            .GroupBy(d => d.Date.Month)
            .Select(m => new Month
            {
                MonthNumber = m.Key,
                Days = m.ToList()
            })
            .ToList()
    })
    .ToList();

推荐阅读