Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste

di Stefano Mostarda, in LINQ,

Negli script #658 e 662 abbiamo parlato di due metodi di LINQ introdotti nella versione 9 di .NET. In questo script parliamo di un altro metodo introdotto sempre da questa versione: IntersectBy. Questo metodo permette di trovare gli elementi in comune tra due liste.
Sin dalla prima versione, LINQ ha sempre avuto un metodo Intersect. Il lato debole di questo metodo sta nel fatto che per identificare gli oggetti in comune usa i metodi Equals e GetHashCode oppure un'istanza di IEquatable rendendone quindi più ostico l'utilizzo.
IntersectBy supera questa limitazione di Intersect permettendo di specificare un secondo parametro che rappresenta una lambda tramite la quale specificare i campi in base a cui verificare l'uguaglianza tra gli oggetti degli insiemi.

var l1 = new List<Person>
{
    new Person { Id = 1, Name = "Stefano Mostarda" },
    new Person { Id = 2, Name = "Daniele Bochicchio" },
    new Person { Id = 3, Name = "Cristian Civera" },
};

var l2 = new List<Person>
{
    new Person { Id = 1, Name = "Stefano Mostarda" },
    new Person { Id = 4, Name = "Marco De Sanctis" },
};

var shared = l1.IntersectBy(l2, p => p.Id);

In questo esempio, vengono create du liste di oggetti persona e successivamente ne viene cercata l'intersezione basando la ricerca sul campo Id. Il risultato è che la lista shared contiene solo la persona con id 1

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi