2013-02-02 13 views

Antwort

14

Mit 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

Wie sieht es mit einer ungültigen Datetime-Zeichenfolge aus? Gibt es eine Möglichkeit, diese ungültige Datetime mit einer bestimmten Zeichenfolge zu ändern? –

4

Sie sollten nicht String-Darstellungen von Daten verwenden - wir alle leben in der objektorientierten Welt sind :)

Der beste Weg, diese Strings in tatsächliche Datetime-Objekte und sortieren sie in umgekehrter Reihenfolge über Linq zu konvertieren wäre :

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

Eine weitere Möglichkeit, benutzerdefinierte Sortierfunktion zu implementieren, siehe this link wäre. Dann würden Sie es einfach in einer Sortierfunktion verwenden:

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

+1, weil Sie nicht mit dem String-Vergleich störten wie ich :) tat –

+0

tatsächlich, Sie das Lambda nicht benötigen, können Sie es so tun können, -Array.ConvertAll (dateStrings, DateTime.Parse) – himanshupareek66

0

Weil sie die UK/AUS-Format (Tag/Monat/Jahr) sind, können Sie sie OrderByDescending mit sortieren:

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); 

persönlich ich würde sie DateTime Objekte zuerst konvertieren ..

0

W hy möchten Sie List<string> anstelle von List<DateTime> verwenden?

List<DateTime> dates = ... 

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

Ich bin sicher, er hatte seine Gründe. Ich brauche es zum Beispiel auch. –

1

Try this:

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));