2009-10-24 26 views
30

J'ai une liste que je dois trier par DateTime, la classe MyStuff ressemble:comment trier une collection par datetime en C#

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

Je dois être capable de trier la liste de collection par la Créé (DateTime) champ.

+0

afin de formater correctement et mettre en évidence les sections de code, vous devez mettre en évidence les lignes dans l'éditeur, puis cliquez sur le bouton « code » (010 101) sur la barre d'outils de l'éditeur, ou appuyez sur Ctrl-K de votre clavier –

Répondre

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

Vous semblez travailler avec une méthode objet List<T>, auquel cas le plus efficace (et simple) serait le suivant:

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

Il utilise la surcharge de la méthode List.Sort que prend un délégué Comparison<T> (et donc l'expression lambda).

Vous pouvez bien sûr utiliser la méthode d'extension LINQ OrderBy, mais je ne pense pas que cela offre des avantages, et peut être considérablement plus lent, selon votre situation.

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

Je ne m'inquiéterais pas de "performance" ici. Bien que les accessoires pour signaler aucun LINQ/sort-par nécessaire. –

+11

La principale différence entre les deux méthodes est que 'List .Sort' trie la liste existante, tandis que' OrderBy' renvoie un nouveau 'IEnumerable ' et laisse la liste seule. C'est soit un avantage si vous voulez conserver la liste originale, soit un coup de performance si vous ne le faites pas. – stevemegson

+0

@stevemegson: C'est très vrai. Cependant, les tris en place sont généralement plus courants. – Noldorin

Questions connexes