2009-10-24 28 views
30

Tengo una lista que necesito para ordenar por DateTime, la clase MiAsk parece:cómo ordenar una colección por fecha y hora en C#

public class MyStuff 
{ 
    public int Type {get;set;} 
    public int Key {get;set;} 
    public DateTime Created {get;set;} 
} 

Tengo que ser capaz de ordenar la lista recogida por la Creado (DateTime) campo.

+0

con el fin de formatear correctamente y destacar las secciones de código, es necesario poner de relieve las líneas en el editor y hacer clic en el "código" botón (010 101) en la barra de herramientas del editor, o pulse Ctrl-K en el teclado –

Respuesta

6
var query = 
    from m in mystuffcollection 
    orderby m.Created ascending 
    select m; 
64

usted parece estar trabajando con un objeto List<T>, en cuyo caso el más eficiente (y una sencilla) método sería el siguiente:

myList.Sort((x, y) => DateTime.Compare(x.Created, y.Created)); 

Este utiliza la sobrecarga del método List.Sort de toma un delegado Comparison<T> (y por lo tanto la expresión lambda).

Por supuesto, puede utilizar el método de extensión LINQ OrderBy, pero no creo que esto ofrezca ninguna ventaja, y puede ser significativamente más lento, dependiendo de su situación.

myList = myList.OrderBy(x => x.Created).ToList(); 
+0

No me preocuparía el "rendimiento" aquí. Aunque los accesorios para señalar no necesitan LINQ/sort-by. –

+11

La diferencia clave entre los dos métodos es que 'List .Sort' ordena la lista existente, mientras que' OrderBy' devuelve un nuevo 'IEnumerable ' y deja la lista solo. Eso es una ventaja si quieres mantener la lista original o un rendimiento si no lo haces. – stevemegson

+0

@stevemegson: Esto es muy cierto. Sin embargo, los géneros in situ suelen ser más comunes. – Noldorin