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?

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);

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();

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);                
}

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


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.


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();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.