以某种方式订购的日期列表

时间:2018-11-21 20:18:56

标签: c# linq sorting

我有一个日期列表(格式为yyyyMM的字符串),如下所示:

201608
201609
201610
201708
201709
201710

我想将它们重新排序如下:

201608
201708
201609
201709
201610
201710

我以为我可以颠倒字符串(即016102)以对其排序但是显然,如果一个月大于等于10,它会导致导致列表出现问题,例如:

201610
201710
201608
201708
201609
201709

我尝试了以下操作: MyList.OrderBy(n => string.Concat(n.datestring.Reverse())).Select(n => n);

是否有一个很好的简洁方法(LINQ会很好)?感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

使用LINQ,您可以按两位数字的月份排序,然后按年份(和月份)排序:

var ans = src.OrderBy(s => s.Substring(4)).ThenBy(s => s);

答案 1 :(得分:1)

我会通过扩展方法亲自作弊并按日期排序:

新课:

public static class DateOperations
{
    public static List<DateTime> GetDates(this List<string> dateStrings)
    {
        List<DateTime> asDates = new List<DateTime>();
        dateStrings.ForEach(e =>
        asDates.Add(DateTime.ParseExact(e, "yyyyMM", CultureInfo.InvariantCulture, DateTimeStyles.None))
        );

        return asDates;
    }
}

然后:

var ordered = myList.GetDates().OrderBy(ord => ord.Month).ThenBy(then => then.Year);

然后当我再次需要字符串时,我将使用:

date[_whateverAccessorReally].ToString("yyyyMM");