2010-02-01 6 views
1

Il ya quelques messages sur le site sur la façon de commander en utilisant des expressions lambda mais je ne peux pas sembler obtenir le mien de travailler. J'essaye de réorganiser une liste qui est déjà remplie. Ai-je tort de penser que je peux réorganiser l'ordre de cette liste en utilisant les expressions lambada? Je me demandais si c'était à cause de PquartermileTime d'être une chaîne de caractères? J'ai également essayé cette expression sur une dateexpressions lambda sur les listes peuplées

QuarterMileTimes.orderBy(c => c.RaceDay); 

Toujours pas de chance où je vais mal?

+0

lambada est la danse interdite. Je pense que vous voulez lambda .. –

+2

@Jeff Atwood: Vous n'avez pas encore vu toutes les nouvelles fonctionnalités de C# 4.0 hein? –

Répondre

5

Lorsque vous appelez OrderByDescending, la méthode retourne un nouveauIEnumerable<T> - il ne réorganise pas la collection en place.

Essayez de faire:

QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime).ToList(); 

(Ceci est si votre collection est un List<T> ...)

+0

Brillant, cela a résolu mon problème et très rapidement. – Truezplaya

+0

Content de l'entendre. –

1

Le résultat de OrderByDescending (et toutes les autres Enumerable méthodes d'extension) est un IEnumerable<T> qui projette les données source dans l'ordre que vous décrivez. Il ne pas modifier les données d'origine en aucune façon.

Si vous préférez, vous pouvez utiliser la méthode d'extension ToList() pour créer un nouveau List<T> à partir de ce résultat et l'assigner à la variable d'origine.

QuarterMileTimes = QuarterMileTimes.OrderByDescending(/*...*/).ToList(); 

(Cela suppose, bien sûr, que QuarterMileTimes est un List<T>)

L'essentiel de la réponse est pas, OrderByDescending ne modifie pas la source de données de quelque façon.

1

Vous assignez à une nouvelle variable non?

var sortedTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime); 

Ce n'est pas comme par ex. la méthode List.Sort, qui trie la liste existante.
Le résultat de la méthode doit être affecté à une variable.

1

OrderByDescending renvoie IOrderedEnumerable<T>, c'est-à-dire une nouvelle séquence avec les éléments dans l'ordre spécifié. Vous devrez réassigner QuarterMileTimes pour obtenir le comportement que vous attendez:

QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquarterMileTime).ToList();

Sinon, vous pouvez simplement utiliser la séquence retournée séparément, ce qui est l'approche habituelle.

0

QuarterMileTimes.OrderByDescending(c => c.PquartermileTime) Renvoie une nouvelle énumérable, classée par PquartermileTime. Il ne réorganise pas QuarterMileTimes en place.