2016-12-12 57 views
0

我有以下格式日期字符串列表LINQ的按日期分类

Apr-2016 
Aug-2015 
Nov-2015 
Oct-2015 
Sep-2015 
July 2016 

代码:

var sortedMonths = monthList 
      .Select(x => new { month = x, Sort = DateTime.ParseExact(x, "MMM-yyyy", CultureInfo.InvariantCulture) }) 
      .OrderByDescending(x => x.Sort.Month) 
      .Select(x => x.month) 
      .ToList(); 

我已经习惯了上面的说法,但名单仍没有下令。

+0

您需要按年份和月份订购,不是吗? –

+2

你确定它应该只按月(x.Sort.Month)排序,而不是整个DateTime字段(x.Sort)? – oryol

+0

'Array.Sort()','IComparer '? –

回答

7

尝试通过整个DateTime对象命令,而不仅仅是月份:

var sortedMonths = monthList 
      .Select(x => new { month = x, Sort = DateTime.ParseExact(x, "MMM-yyyy", CultureInfo.InvariantCulture) }) 
      .OrderByDescending(x => x.Sort) 
      .Select(x => x.month) 
      .ToList(); 
+0

为什么要保存'month'和'sort'?只需解析日期时间并直接对其进行排序?无论如何,他们都是一个月的第一个。 – C4u

1

请确保日期字符串是正确的格式。

July-2016 

应该

Jul-2016 

下面是排序按日期降序工作样例

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using System.Globalization; 

public class TestSortDateStrings 
{ 
    public static void Main() 
    { 
     var monthList = new List<string> {"Apr-2016", "Aug-2015", "Nov-2015", "Oct-2015", "Sep-2015", "Jul-2016"}; 
     var sortedMonths = monthList 
      .Select(x => new { month = x, Sort = DateTime.ParseExact(x, "MMM-yyyy", CultureInfo.InvariantCulture) }) 
      .OrderByDescending(x => x.Sort) 
      .Select(x => x.month) 
      .ToList(); 

     foreach(var m in sortedMonths) 
     { 
      Console.WriteLine(m); 
     } 
    } 
} 

,你会得到相同的结果,如果你首先按年份,然后按月份

.OrderByDescending(x => x.Sort.Year) 
.ThenByDescending(x => x.Sort.Month) 

产量为

Jul-2016 
Apr-2016 
Nov-2015 
Oct-2015 
Sep-2015 
Aug-2015