web-dev-qa-db-fra.com

OrdrePar décroissant dans l'expression Lambda?

Je sais que dans la grammaire normale de Linq, orderby xxx descending est très facile, mais comment puis-je faire cela dans une expression lambda?

244
silent

Comme Brannon le dit, c'est OrderByDescending et ThenByDescending :

var query = from person in people
            orderby person.Name descending, person.Age descending
            select person.Name;

est équivalent à:

var query = people.OrderByDescending(person => person.Name)
                  .ThenByDescending(person => person.Age)
                  .Select(person => person.Name);
419
Jon Skeet

Utilisez System.Linq.Enumerable.OrderByDescending()?

Par exemple:

var items = someEnumerable.OrderByDescending();
63
Brannon

Essaye ça:

List<int> list = new List<int>();
list.Add(1);
list.Add(5);
list.Add(4);
list.Add(3);
list.Add(2);

foreach (var item in list.OrderByDescending(x => x))
{
    Console.WriteLine(item);                
}
21
Anton P

Essayez ceci d'une autre manière:

var qry = Employees
          .OrderByDescending (s => s.EmpFName)
          .ThenBy (s => s.Address)
          .Select (s => s.EmpCode);

Queryable.ThenBy

14
Sujit

Cela ne fonctionne que dans les cas où vous avez un champ numérique, mais vous pouvez mettre un signe moins devant le nom du champ comme suit:

reportingNameGroups = reportingNameGroups.OrderBy(x=> - x.GroupNodeId);

Cependant, cela fonctionne un peu différemment que OrderByDescending lorsque vous l'exécutez sur un champ int? ou double? ou decimal?.

Ce qui se passera est sur OrderByDescending les valeurs nulles seront à la fin, vs avec cette méthode, les valeurs nulles seront au début. Ce qui est utile si vous souhaitez mélanger les valeurs NULL sans fractionner les données en plusieurs parties et les épisser ultérieurement.

3

LastOrDefault() ne fonctionne généralement pas, mais avec Tolist() cela fonctionnera. Il n'y a pas besoin d'utiliser OrderByDescending utiliser Tolist() comme ceci.

GroupBy(p => p.Nws_ID).ToList().LastOrDefault();
1
Kawindu