2013-02-02 15 views

risposta

14

Con LINQ:

var list = new List<string> {"01/01/2013", "10/01/2013", "20/01/2013"}; 
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList(); 
+0

E se ci fosse una stringa datetime non valida? C'è un modo per modificare quel datetime non valido con una stringa specifica? –

4

Non si deve usare rappresentazioni di stringa di dati - siamo tutti vivendo in object-oriented mondo :)

modo migliore sarebbe quello di convertire queste stringhe in oggetti DateTime attuali e ordinarli in ordine inverso via LINQ :

var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x)); 
return dates.OrderByDesc(x => x); 

Un altro modo sarebbe quello di implementare la funzione di ordinamento personalizzato, vedere this link. Poi si era appena utilizza in un funzione di ordinamento:

DateAsStringComparer myComparer = new DateAsStringComparer(); 
dateStrings.Sort(myComparer); 
+0

+1 perché non hai la briga con il confronto di stringhe come ho fatto io :) –

+0

in realtà, non è necessario il lambda, si può fare in questo modo -Array.ConvertAll (dateStrings, DateTime.Parse) – himanshupareek66

0

Perché sono il formato di UK/AUS (giorno/mese/anno), è possibile ordinare utilizzando OrderByDescending:

List<string> dates = new List<string>() { "01/01/2013", "10/01/2013", "20/10/2013" }; 

foreach (var date in dates.OrderByDescending(x => x)) 
    Console.WriteLine(date); 

Personalmente io li convertirli in oggetti di prima DateTime ..

0

W hy vuoi utilizzare List<string> anziché List<DateTime>?

List<DateTime> dates = ... 

dates.OrderByDescending(c => c).ToList(); 
+0

Sono sicuro che avesse le sue ragioni. Ne ho bisogno anche io, per esempio. –

1

Prova questo:

List<string> s = new List<string>() { "01/01/2013", "10/01/2013", "20/01/2013" }; 
var d = s.OrderByDescending(i => DateTime.ParseExact(i, "dd/MM/yyyy", null)); 
Problemi correlati