2014-09-06 80 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