我以前在这里问过这个问题:List of Dates ordered in a certain way

我以为所提议的解决方案很好,直到该年在我的日期列表上打勾并遇到了问题。

我的日期列表(以这种基于字符串的格式-这是数据从源API发送给我的方式)

201711
201712
201801
201811
201812
201901


我想在条形图中显示我的数据,以按月顺序显示3个月的同比值。这意味着我要这样订购清单

201711
201811
201712
201812
201801
201901


这样,我就可以按顺序查看11月,12月和1月的按年酒吧。

我在问题的底部尝试过解决方案,但是它的顺序是这样的(这不是我想要的):

201801
201901
201711
201811
201712
201812


为了清楚起见,下个月将需要继续成为该日期列表:

我想要的第一个月永远是当前月份的2个月

201712
201812
201801
201901
201802
201902




var rowsInOrder = dateList.OrderBy(n => DateTime.ParseExact(n, "yyyyMM", CultureInfo.CurrentCulture).Month).ThenBy(n=> DateTime.ParseExact(n, "yyyyMM", CultureInfo.CurrentCulture).Year);

最佳答案

您可以使用以下查找方法来首先确定月份组:

var monthLookup = dateList
    .Select(s => new{String = s, Date = DateTime.ParseExact(s, "yyyyMM", CultureInfo.CurrentCulture)})
    .OrderBy(x => x.Date)  // not necessary in your sample data but i assume it's desired
    .ToLookup(x=> x.Date.Month);
var rowsInOrder = monthLookup.SelectMany(x => x).Select(x => x.String);

09-25 18:30