2016-12-19 2 views
0

У меня есть список «Сайты» с одним из предметов, как «Год». Он определен как строка и находится в формате «MM/yyyy». данные для «Год» являетсяРазделение строки и сортировка - Linq

01/2012 
04/2012 
01/2013 
06/2012 

Я понимаю, что я могу использовать DateTime.Parse для преобразования строки и отсортировать его. Но я хочу разбить строку и выполнить сортировку с помощью linq. Есть ли возможность расщепления MM и yyyy, сортировка?

ответ

1

Ну, как указано в другой ответ, вы можете это сделать. Мой ответ использует анонимную структуру, поэтому сортировка должна быть более эффективной.

method1Result показать, что я сделал бы (при условии, что данные всегда действительны). Главное преимущество заключается в том, что у вас есть объект DateTime, поэтому было бы проще использовать его позже.

method2Result не использовать DateTime.Parse как требуется в вопросе. Однако это приводит к более длинному коду, и результат менее полезен (и если вам нужно его вернуть, вам придется заменить анонимную структуру на один, который вы определите.

var data = new string[] 
{ 
    "01/2012", 
    "04/2012", 
    "01/2013", 
    "06/2012", 
}; 

var method1Result = data 
    .Select(x => DateTime.Parse(x)).OrderBy(x => x); 

var method2Result = data 
    .Select(x => 
     { 
      var t = x.Split('/'); 
      return new { 
       year = int.Parse(t[1]), 
       month = int.Parse(t[0]) }; 
      }) 
    .OrderBy(x => x.year) 
    .ThenBy(x => x.month); 
1

Абсолютно, это легко сделать. Тем не менее, это неэффективно, потому что вы должны сделать разделение на каждом сравнении:

.OrderBy(yearMonthStr => { 
    var tokens = yearMonthStr.Split('/'); 
    return int.Parse(tokens[0]) + 100*int.Parse(tokens[1]) 
})