Список дат, заказанных определенным образом - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть список дат (строки в формате 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 голосов
/ 22 ноября 2018

Я бы обманул и упорядочил по датам лично, с помощью метода расширения:

Новый класс:

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");
0 голосов
/ 21 ноября 2018

Используя LINQ, вы заказываете двузначный месяц, а затем год (и месяц, но это не должно иметь значения):

var ans = src.OrderBy(s => s.Substring(4)).ThenBy(s => s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...