2015-03-04 2 views
0

J'ai ce codeliste de tri des listes en utilisant LINQ score élevé est d'abord, puis nom et prénom par ordre alphabétique

Person[] peopleArray = new Person[5] 
    { 
     new Person("John", "Jones", "001", 1450), 
     new Person("Jimmy", "Smith", "004", 1237), 
     new Person("Sue", "Baker", "002", 1534), 
     new Person("Chuck", "Smith", "003", 1450), 
     new Person("Toby", "Jones", "005", 1450) 
    }; 

var sortedPeopleList = peopleArray.OrderBy(a => a.score).ThenBy(a => a.lastName) 
               .ThenBy(a => a.firstName).Reverse(); 

foreach (Person p in sortedPeopleList) 
Console.WriteLine(p.score + " " + p.id + " " + p.firstName + " " + p.lastName); 
Console.ReadKey(); 

sortie est:

1534 002 Sue Baker

1450 003 Chuck Smith < = ceci devrait être # 4

1450 005 Toby Jones= cela devrait être # 3

1450 001 John Jones < = cela devrait être # 2

1237 004 Jimmy Smith

sortie désiré doit être triée par Score (décroissant), puis nom (croissant), enfin la dernière nom (croissant)

534 002 Sue Baker

1450 001 John Jones

1450 005 Toby Jones

1450 003 Chuck Smith

1237 004 Jimmy Smith

Toute suggestion serait utile. Merci!

Répondre

3

Les deux OrderBy et ThenBy ont les méthodes partenaires OrderByDescending et ThenByDescending.

Alors maintenant, vous pouvez éliminer Reverse et aller avec:

peopleArray.OrderByDescending(a => a.score) 
      .ThenBy(a => a.lastName) 
      .ThenBy(a => a.firstName); 
+0

brillant! Je n'ai pas réalisé qu'il y avait une méthode OrderByDescending. Merci beaucoup @spender. :-) –