Neu in .NET 6 [8]: Neuer LINQ-Operator IntersectBy()

Der Dotnet-Doktor Die Serie zu den Neuerungen in .NET 6 behandelt im achten Teil einen Operator zum Erzeugen von Schnittmengen.  –  10 Kommentare

Die Serie zu den Neuerungen in .NET 6 behandelt im achten Teil einen Operator zum Erstellen von Schnittmengen.

Im den beiden letzten Teilen der .NET 6-Serie habe ich DistinctBy() und UnionBy() behandelt. .NET 6 bietet mit IntersectBy() einen weiteren neuen Mengenoperator, der aus zwei Mengen anhand eines Kriteriums eine Schnittmenge erzeugt.

Gegeben sei eine Menge von Personen mit ihren Lieblingsfarben

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

und eine Liste von Farben in Form von Zeichenketten

List<string> farben = new() { "grün", "rot" };

Nun kann man mit IntersectBy() eine Schnittmenge bilden:

Func<(string Name, string Farbe), string> 
keySelector = x => x.Farbe;
var schnittmenge =
personen.IntersectBy(farben, keySelector).ToList();

Das Ergebnis in der Schnittmenge ist folgendes:

 (Annalena, grün)
(Olaf, rot)

Das bedeutet IntersectBy() wählt wie DistinctBy() und UnionBy() nur jeweils das erste passende Elemente aus und ignoriert alle anderen.