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

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

vorlesen Druckansicht 3 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

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.
()