Neu in .NET 6 [4]: MinBy() und MaxBy()

Der Dotnet-Doktor Holger Schwichtenberg  –  5 Kommentare

Die Serie zu den Neuerungen in .NET 6 behandelt im vierten Teil zwei neue LINQ-Operatoren, die Min() und Max() ergänzen.

Während Min() und Max() aus einer Menge von Objekten das kleinste beziehungsweise größte liefern, bekommt man bei MinBy() und MaxBy() das umgebende Objekt frei Haus mitgeliefert. Das lässt sich an einem Beispiel mit den Ergebnissen der aktuellen Bundestagswahl erläutern.

Gegeben sei

record Partei(string Name, short Sitze);

und die Liste der Sitze im Bundestag pro Partei

var bundestagSitze = new List<Partei>()
{
new Partei("CDU",151), new Partei("CSU",45),
new Partei("SPD", 205), new Partei("Grüne",118),
new Partei("FDP",92),new Partei("AfD",83),
new Partei("Linke",39), new Partei("SSW",1)
};

Nun lässt sich Min(), Max(), MinBy() und MaxBy() anwenden:

int meiste = bundestagSitze.Max(x => x.Sitze); // 205
int geringste = bundestagSitze.Min(x => x.Sitze); // 1

Partei groeßte = bundestagSitze.MaxBy(x => x.Sitze); // { "SPD",205 }
Partei kleinste = bundestagSitze.MinBy(x => x.Sitze); // { "SSW",1 }

Man bekommt also bei Min() und Max() nur die niedrigste und höchste Sitzanzahl als Wert geliefert, aber weiß nicht, welche Partei dazu gehört. MinBy() und MaxBy() liefern hingegen das ganze Partei-Objekt! Falls übrigens mehrere Parteien mit gleicher Sitzanzahl in der Liste gäbe, würden MinBy() und MaxBy() die jeweils erste Partei in der Liste mit den wenigstens beziehungsweise meisten Sitzen liefern. MinBy() und MaxBy() geben keine Liste zurück, wenn es mehrere Treffer gibt.

betterCode() .NET 6: die Heise-Konferenz zum künftigen LTS-Release

Am 23. November 2021 richten heise Developer und dpunkt.verlag in Kooperation mit www.IT-Visions.de mit der betterCode() .NET 6 eine Online-Konferenz zum kommenden LTS-Release (Long-Term Support) von Microsofts Entwicklungsplattform .NET aus. Insgesamt sieben Vorträge behandeln die Neuerungen im Framework und in Version 10 der Programmiersprache C#.

MinBy() und MaxBy() funktionieren bisher leider nicht in LINQ-to-SQL. In LINQ-to-Entities bei Entity Framework Core für den Datenbankzugriff sind sie leider bisher nicht implementiert. Beim Versuch kommt es zum Fehler: "The LINQ expression 'MaxBy(…)' could not be translated."

.NET 6 ist derzeit im Stadium Release Candidate 2 mit "Go-Live"-Lizenz, darf also produktiv eingesetzt werden. Die endgültige Version soll am 9.11.2021 erscheinen.