Ricercare elementi in comune tra più liste con la clausola Intersect di LINQ

di , in LINQ, UserScript,

Nello script precedente si è visto come con LINQ si possano fondere più liste in una sola. In questo script, apporteremo una differenza da utilizzare quando si vogliono recuperare solo gli oggetti in comune ad entrambe le liste tramite il metodo Intersect.

Anche in questo caso si usa una lista di oggetti Persona che è una classe con le proprietà Nome e Cognome e con i metodi Equals e GetHashCode, reimplementati per garantire una corretta comparazione tra gli oggetti. Grazie a questa implementazione, le istanze di Persona che hanno lo stesso nome e cognome sono considerate uguali.

L'ultimo passo consiste nello sfruttare la clausola Intersect per ricercare le persone della prima lista presenti anche nella seconda e quella select per estrarre l'intero oggetto.

System.Collections.Generic.List<Persona> persone1 = new System.Collections.Generic.List<Persona>{
  new Persona { Nome = "Stefano", Cognome = "Mostarda" },
  new Persona { Nome = "Daniele", Cognome = "Bochicchio" },
  new Persona { Nome = "Riccardo", Cognome = "Golia" },
  new Persona { Nome = "Cristian", Cognome = "Civera" },
  new Persona { Nome = "Marco", Cognome = "Leoncini" }
};
System.Collections.Generic.List<Persona> persone2 = new System.Collections.Generic.List<Persona>{
  new Persona { Nome = "Alessio", Cognome = "Leoncini" },
  new Persona { Nome = "Andrea", Cognome = "Zani" },
  new Persona { Nome = "Stefano", Cognome = "Mostarda" },
  new Persona { Nome = "Cristian", Cognome = "Paparelli" },
  new Persona { Nome = "Ugo", Cognome = "Lattanzi" },
  new Persona { Nome = "Cristian", Cognome = "Civera" },
};
var q = from p in persone1.Intersect(persone2) select p;

lv.DataSource = q;
lv.DataBind();

Un'operazione del genere senza LINQ avrebbe comportato la scrittura di diverso codice. Infatti, per arrivare allo stesso risultato si sarebbe dovuto ciclare ogni elemento della lista persone1 e per ognuno ciclare la lista persone2 per trovare quello con lo stesso nome e cognome.

Per approfondimenti si veda:

Introduzione a LINQ
http://www.winfxitalia.com/articoli/netfx3.5/linq.aspx

#14 - Eseguire query con LINQ
http://www.winfxitalia.com/script/14/Eseguire-Query-LINQ.aspx

#16 - Anonymous Type con LINQ
http://www.winfxitalia.com/script/16/Anonymous-Type-LINQ.aspx

#18 - Eseguire raggruppamenti con tramite Group By con LINQ
http://www.winfxitalia.com/script/18/Eseguire-Raggruppamenti-Tramite-Group-BY-LINQ.aspx

#20 - Unire liste tramite il Metodo Union di LINQ
http://www.winfxitalia.com/script/20/Unire-Liste-Tramite-Metodo-Union-LINQ.aspx

Commenti

Visualizza/aggiungi commenti

Ricercare elementi in comune tra più liste con la clausola Intersect di LINQ (#22)
| Condividi su: Twitter, Facebook, LinkedIn, Google+

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