是否有一个简单的LINQ方法按月对列表进行排序?

时间:2016-06-29 17:13:04

标签: c# linq

假装我们有一个这样的简单模型,其中一列是"月"作为一个三个字母的字符串。

public class SampleModel
{            
    public int ID { get; set; }
    public string Column1 { get; set; }
    public string Month { get; set; }
    public string Column2 { get; set; }
}

如果我们想按月对该模型进行排序,可以使用

之类的LINQ语句
  

query.OrderBy(m => m.Month)

会产生以下按字母顺序排序,因为Month是一个字符串。

是否有一种按时间顺序排序Month的简单方法?

Sample table

2 个答案:

答案 0 :(得分:4)

您可以通过将数据存储在查找表/字典或枚举中来实现。如果你使用LINQ to Objects,而不是任何基于LINQ的花哨表达式,那么这是有效的。

Dictionary<string, int> months = new Dictionary<string, int>();
months.Add("Jan", 0);
// and so on

query.OrderBy(m => months[m.Month]);

此解决方案适用于其他类型的数据,而不仅仅是几个月。

答案 1 :(得分:3)

您可以将Month部分解析为DateTime,然后使用OrderBy,例如:

var orderedCollection = list.OrderBy(r => 
                   DateTime.ParseExact(r.Month, "MMM", CultureInfo.InvariantCulture));

通过这样的解析,日期,年份部分将被选择为当前日期。虽然这与您的排序无关