Neu in .NET 6 [7]: Neuer LINQ-Operator UnionBy()

Der Dotnet-Doktor Holger Schwichtenberg  –  2 Kommentare

Die Serie zu den Neuerungen in .NET 6 behandelt im siebten Teil einen Operator zum Verbinden von Objektmengen ohne Duplikate.

Im vorherigen Teil dieser Serie habe ich DistinctBy() als Ergänzung zu Distinct() behandelt. Diese Woche geht es um UnionBy() als Ergänzung zu Union(). Letzterer Operator, den es seit .NET Framework 3.5 (erschienen November 2007) gibt, verbindet zwei Objektmengen zu einer Vereinigungsmenge.

Gegeben seien zwei Mengen von Tupeln mit Namen und Farben:

var personen1 = new (string Name, string Farbe)[] { 
("Annalena", "grün"),
("Angela", "schwarz"),
("Olaf", "rot"),
("Norbert", "rot"),
("Saskia", "rot"),
("Robert", "grün") };

var personen2 = new (string Name, string Farbe)[] {
("Armin", "schwarz"),
("Christian", "gelb"),
("Alice", "blau") };

Wenn man diese Mengen per Union() verbindet

var allePersonen1 = personen1.Union(personen2);

erhält man die Vereinigungsmenge

 (Annalena, grün)
(Angela, schwarz)
(Olaf, rot)
(Norbert, rot)
(Saskia, rot)
(Robert, grün)
(Armin, schwarz)
(Christian, gelb)
(Alice, blau)

Der neue Operator UnionBy() erlaubt zusätzlich die Angabe eines Kriteriums, um Duplikate herauszufiltern.

var allePersonen2 = 
personen1.UnionBy(personen2, x => x.Farbe);

Das ergibt ist dann nur noch

 (Annalena, grün)
(Angela, schwarz)
(Olaf, rot)
(Christian, gelb)
(Alice, blau)

Es wird also pro Farbe nur noch die erste Person in die Vereinigungsmenge aufgenommen.