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?
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);
Utilisez System.Linq.Enumerable.OrderByDescending()
?
Par exemple:
var items = someEnumerable.OrderByDescending();
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);
}
Essayez ceci d'une autre manière:
var qry = Employees
.OrderByDescending (s => s.EmpFName)
.ThenBy (s => s.Address)
.Select (s => s.EmpCode);
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.
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();