假装我们有一个这样的简单模型,其中一列是"月"作为一个三个字母的字符串。
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
的简单方法?
答案 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));
通过这样的解析,日期,年份部分将被选择为当前日期。虽然这与您的排序无关