Neu in .NET 7.0 [30]: LINQ-Operatoren Order() und OrderDescending()

Microsoft hat die Operatoren zum Sortieren von Listen um verkürzte Varianten ergänzt.

vorlesen Druckansicht 3 Kommentare lesen

(Bild: Pincasso/Shutterstock)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die Sortieroperatoren OrderBy() und OrderByDescending() gibt es in der Language Integrated Query (LINQ) seit diese in .NET Framework 3.5 im Jahr 2007 erschienen ist.

Der Dotnet-Doktor – Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Neu in .NET 7.0 ist, dass es nun zusätzlich jeweils eine Variante ohne das Wort "By" gibt. Microsoft hat bei den LINQ-Operatoren die Methoden Order() und OrderDescending() als Ergänzung zu OrderBy() und OrderByDescending() eingeführt.

Videos by heise

Die neuen Methoden Order() und OrderDescending() erlauben eine verkĂĽrzte Syntax zum Sortieren von Listen mit elementaren Datentypen.

Mit den neuen Methoden Order() und OrderDescending() reicht fĂĽr eine Liste von Zahlen, Zeichenketten oder Datumsangaben zum aufsteigenden Sortieren nun statt

var datenlisteSortiert = datenliste.OrderBy(x => x);

einfacher

var datenlisteSortiert = datenliste.Order();​

und zum absteigenden Sortieren statt

var datenlisteSortiert = datenliste.OrderByDescending(x => x);​

nun

var datenlisteSortiert = datenliste.OrderDescending();

Order() und OrderDescending() ohne "By" und ohne Parameter arbeiten mit LINQ-to-Objects (also IEnumerable<T>), allerdings versagt Entity Framework Core beim Versuch, diese neuen Operatoren auf eine Datenbank (also IQueryable<T>) anzuwenden. Dieser Code

var q = (from f in efcore_context.FlightSet
         select f.Departure)
         .OrderDescending()
         .ToList();

liefert den Laufzeitfehler The LINQ expression 'DbSet<Flight>() .Select(f => f.Departure).OrderDescending()' could not be translated..

Denselben Effekt gibt es auch immer noch mit den bereits in .NET 6.0 eingeführten LINQ-Operatoren wie MinBy(), MaxBy(), DistinctBy() und Chunk(), die selbst in Entity Framework Core 7.0 noch nicht unterstützt werden, wie der zugehörige Issue auf GitHub zeigt.

(rme)