C# 以某种方式排序的日期列表

C# 以某种方式排序的日期列表,c#,linq,sorting,C#,Linq,Sorting,我有一个日期字符串列表,格式为yyyyMM,如下所示: 201608 201609 201610 201708 201709 201710 201608 201708 201609 201709 201610 201710 我想将它们重新排序如下: 201608 201609 201610 201708 201709 201710 201608 201708 201609 201709 201610 201710 我认为我可以反转字符串,即016102,以对其进行排序,但很明显,如果月份

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

201608
201609
201610
201708
201709
201710
201608
201708
201609
201709
201610
201710
我想将它们重新排序如下:

201608
201609
201610
201708
201709
201710
201608
201708
201609
201709
201610
201710
我认为我可以反转字符串,即016102,以对其进行排序,但很明显,如果月份>=10,则会导致出现问题,导致列表如下所示:

201610
201710
201608
201708
201609
201709
我尝试了以下方法: MyList.OrderByn=>string.Concatn.datestring.Reverse.Selectn=>n


有没有一种简洁的方法来做这件事LINQ会很好?感谢您的帮助。

使用LINQ,您可以按两位数的月份进行订购,然后按年份和月份进行订购,但这并不重要:

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

使用LINQ,您可以按两位数的月份进行订购,然后是年和月,但这并不重要:

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

我会通过一种扩展方法,亲自作弊并按日期订购:

新类别:

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;
    }
}
当我再次需要字符串时,我会使用:

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

我会通过一种扩展方法,亲自作弊并按日期订购:

新类别:

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;
    }
}
当我再次需要字符串时,我会使用:

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

您不希望反转字符串,而是希望将其分为两个子字符串,年和月,然后分别按这些子字符串进行排序,然后依次为月和年。尝试类似myList.OrderBys=>s.Substring4.ThenBys=>s.Substring0,4这样的方法,很明显,您希望它们按月份排序,然后按年份排序?或者,你只是想让他们按照你说的顺序。考虑把日期和时间作为日期或时间。它们更容易处理。然而,@BrianRogers的解决方案可能是一种方式,假设我正确地猜到了你的问题陈述是的,这就是问题所在,Brian。很晚了。我脑子里放了个屁!谢谢你给我松绑!我来试一试。你不想颠倒字符串,你想把它分成两个子字符串,一年一个月,然后分别按月份和年份排序。尝试类似myList.OrderBys=>s.Substring4.ThenBys=>s.Substring0,4这样的方法,很明显,您希望它们按月份排序,然后按年份排序?或者,你只是想让他们按照你说的顺序。考虑把日期和时间作为日期或时间。它们更容易处理。然而,@BrianRogers的解决方案可能是一种方式,假设我正确地猜到了你的问题陈述是的,这就是问题所在,Brian。很晚了。我脑子里放了个屁!谢谢你给我松绑!我来试试,不错。非常感谢。不错。非常感谢。