C# 转折点列表<;日期时间>;在每个月和每年将它们分开的列表中

C# 转折点列表<;日期时间>;在每个月和每年将它们分开的列表中,c#,linq,datetime,C#,Linq,Datetime,我目前有billDates,这是一个非常不一致的日期列表。我想做的是每月有单独的日期列表或数组。也就是说,如果我有12/30/2015,1/5/2016,1/6/2016,2/5/2016,我应该有3个列表 以下是我目前掌握的情况: // billDates = list of DateTime List<List<DateTime>> datesByMonth = new List<List<DateTime>>(); var years = b

我目前有
billDates
,这是一个非常不一致的日期列表。我想做的是每月有单独的日期列表或数组。也就是说,如果我有
12/30/2015
1/5/2016
1/6/2016
2/5/2016
,我应该有3个列表

以下是我目前掌握的情况:

// billDates = list of DateTime
List<List<DateTime>> datesByMonth = new List<List<DateTime>>();
var years = billDates.GroupBy(x => x.Year);

foreach (var year in years)
{
    var months = year.GroupBy(x => x.Month);
    foreach (var month in months)
    {
        List<DateTime> datesWithinMonth = new List<DateTime>();
        foreach (DateTime dt in month)
        {
            datesWithinMonth.Add(dt);
        }
        datesByMonth.Add(datesWithinMonth);
    }
}
//billDates=日期时间列表
List datesByMonth=新列表();
var年份=billDates.GroupBy(x=>x.Year);
foreach(var年,以年为单位)
{
风险值月数=年。分组比(x=>x.Month);
foreach(var月,以月为单位)
{
List datesWithinMonth=新列表();
foreach(以月为单位的日期时间dt)
{
datesWithinMonth.Add(dt);
}
datesByMonth.Add(dateswithimonth);
}
}

我的结果将它们分开,但它们的分组都不正确。我做错了什么

尝试按月份和年份属性对列表进行分组,例如:

var groupResult = billDates.GroupBy(x => new { x.Month, x.Year });

List<List<DateTime>> datesByMonth = groupResult.Select(g => g.ToList())
                                               .ToList();
var groupResult=billDates.GroupBy(x=>new{x.Month,x.Year});
List datesByMonth=groupResult.Select(g=>g.ToList())
.ToList();

您必须使用
select
方法在
groupResult
上选择每个组,并将其作为列表。最后,只需使用
ToList
方法获取所有列表,并获得列表列表(在您的情况下为datetime)。

尝试按月份和年份属性对列表进行分组,例如:

var groupResult = billDates.GroupBy(x => new { x.Month, x.Year });

List<List<DateTime>> datesByMonth = groupResult.Select(g => g.ToList())
                                               .ToList();
var groupResult=billDates.GroupBy(x=>new{x.Month,x.Year});
List datesByMonth=groupResult.Select(g=>g.ToList())
.ToList();

您必须使用
select
方法在
groupResult
上选择每个组,并将其作为列表。最后,只需使用
ToList
方法获取所有列表,并获得列表列表(在您的情况下为datetime)。

在迭代之前按年/月排序可能会解决您的排序问题。
billDates.GroupBy(x=>x.year*12+x.month)在迭代之前按年/月排序可能会解决您的排序问题。
billDates.GroupBy(x=>x.year*12+x.month)select
方法选择分组结果,并将其作为列表。最后,用
ToList
方法得到一个列表。你太棒了。谢谢你的帮助。嗨,菲利佩,谢谢你的帮助。您能否详细说明一下这将如何从groupResult变成单独的列表?编辑:哈哈,别介意你已经编辑过了。谢谢您可以在groupResult上迭代,以获得GroupByMethod返回的每个列表。我已经更正了它。实际上,您必须使用
select
方法选择分组结果,并将其作为列表。最后,用
ToList
方法得到一个列表。你太棒了。谢谢你的帮助。