Par ordre décroissant dans l'expression Lambda?

250

Je sais que dans la grammaire Linq normale, orderby xxx descendingc'est très facile, mais comment faire cela dans l'expression Lambda?

silencieux
la source

Réponses:

428

Comme le dit Brannon, c'est OrderByDescendinget 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);
Jon Skeet
la source
7
"order by person.Name descending" devrait être " orderby person.Name descending"
mxmissile
63

Utiliser System.Linq.Enumerable.OrderByDescending()?

Par exemple:

var items = someEnumerable.OrderByDescending();
Brannon
la source
21

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);                
}
Paul Zahra
la source
14

Essayez ceci d'une autre manière:

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

Queryable.ThenBy

Sujit
la source
3

Cela ne fonctionne que dans les situations 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 autre petit peu que OrderByDescendinglorsque vous avez exécutez sur un int?ou double?ou les decimal?champs.

Ce qui se passera est sur OrderByDescendingles nulls sera à la fin, vs avec cette méthode, les nulls seront au début. Ce qui est utile si vous souhaitez mélanger les valeurs nulles sans diviser les données en morceaux et les épisser plus tard.

Alexander Ryan Baggett
la source
1

LastOrDefault()ne fonctionne généralement pas, mais avec le Tolist()cela fonctionnera. Il n'est pas nécessaire d' OrderByDescendingutiliser une Tolist()telle utilisation .

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