2014-09-06 79 views
1

我有一个字符串列表,其中每个字符串是一个月+年。我发现类似的问题here,但它只是与月份的列表。所以我的清单看起来像在列表中排序月份和年份

List<string> monthsList = new List<string>(); 
     monthsList.Add("August 2015"); 
     monthsList.Add("June 2014"); 
     monthsList.Add("February 2014"); 
     monthsList.Add("June 2015"); 

有没有一种方法来订购它呢?

February 2014 
June 2014 
June 2015 
August 2015 
+1

为什么你需要一个'string'列表而不是'DateTime'列表?你正确的数据类型和问题消失。 – wdosanjos 2014-09-06 13:27:55

回答

7

确保您更改DateTime.Parse格式,以使其占今年除了每月:

DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture) 

并确保您更改OrderBy键选择,使其考虑整个日期,而不仅仅是执行排序的月份:

.OrderBy(x => x.Sort) 

完整的代码如下所示:

var sortedMonths = monthsList 
    .Select(x => new { Name = x, Sort = DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture) }) 
    .OrderBy(x => x.Sort) 
    .Select(x => x.Name) 
    .ToArray(); 
+0

谢谢。问题是,如果您将2016年6月添加到列表中,则产量将为2014年2月,2014年6月,2015年6月,2016年6月,2015年8月。 我需要2016年6月在列表中的最后一个位置 – mirosz 2014-09-06 13:22:21

+0

Whops。您需要将'Sort.Month'更改为'Sort'。看看这些有趣的编辑;-P – 2014-09-06 13:23:56

+0

就是这样!谢谢你的帮助 – mirosz 2014-09-06 13:27:38