Ordenar lista de cadenas con fechas en C#

Ordenar lista de cadenas con fechas en C#

Con enlace:

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

ACTUALIZACIÓN (según preguntas en los comentarios):

Puede tratar las fechas no válidas de esta manera (la fecha no válida se trata como default(DateTime)) ):

var list = new List<string> { "01/01/2013", "10/01/2013", "N/A" , "20/01/2013"  };
var orderedList2 = list.OrderByDescending(x =>
            {
                DateTime dt;
                DateTime.TryParse(x, out dt);
                return dt;
            });

O si desea tener una fecha y hora no válida como primer elemento de la lista:

var orderedList3 = list.OrderByDescending(x =>
            {
                DateTime dt;
                if (!DateTime.TryParse(x, out dt)) return DateTime.MaxValue;
                return dt;
            }); 

También puede filtrar las fechas no válidas:

var filteredList = list.Where(x =>
            {
                DateTime dt;
                return DateTime.TryParse(x, out dt);
            }).Select(DateTime.Parse).OrderByDescending(x => x);

O aún mejor:

var filteredList = list.Select(x =>
        {
            DateTime dt;
            return new {valid = DateTime.TryParse(x, out dt), date = dt};
        }).Where(x => x.valid).Select(x => x.date).OrderByDescending(x => x);

No debe usar representaciones de cadenas de datos:todos vivimos en un mundo orientado a objetos :)

La mejor manera sería convertir estas cadenas en objetos DateTime reales y ordenarlos en orden inverso a través de linq:

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

Otra forma sería implementar una función de clasificación personalizada, consulte este enlace. Entonces simplemente lo usaría en una función de clasificación:

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

Prueba esto:

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