OrderBy absteigend im Lambda-Ausdruck?

250

Ich weiß, dass es in der normalen Linq-Grammatik orderby xxx descendingsehr einfach ist, aber wie mache ich das im Lambda-Ausdruck?

Leise
quelle

Antworten:

428

Wie Brannon sagt, ist es OrderByDescendingund ThenByDescending:

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

ist äquivalent zu:

var query = people.OrderByDescending(person => person.Name)
                  .ThenByDescending(person => person.Age)
                  .Select(person => person.Name);
Jon Skeet
quelle
7
"order by person.Name descending" sollte " orderby person.Name descending" sein
mxmissile
63

Verwenden System.Linq.Enumerable.OrderByDescending()?

Beispielsweise:

var items = someEnumerable.OrderByDescending();
Brannon
quelle
21

Versuche dies:

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
quelle
14

Versuchen Sie es anders:

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

Queryable.ThenBy

Sujit
quelle
3

Dies funktioniert nur in Situationen, in denen Sie ein numerisches Feld haben. Sie können jedoch wie folgt ein Minuszeichen vor den Feldnamen setzen:

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

Dies funktioniert jedoch etwas anders als OrderByDescendingwenn Sie es auf einem int?oder double?oder decimal?Feldern ausführen.

Was passieren wird, ist, dass OrderByDescendingdie Nullen am Ende stehen, während bei dieser Methode die Nullen am Anfang stehen. Dies ist nützlich, wenn Sie Nullen mischen möchten, ohne Daten in Teile aufzuteilen und später zu spleißen.

Alexander Ryan Baggett
quelle
1

LastOrDefault()funktioniert normalerweise nicht, aber mit dem wird Tolist()es funktionieren. Es besteht keine Notwendigkeit zu verwenden OrderByDescendingVerwendung Tolist()wie diese.

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