domenica 8 gennaio 2023

C# how to use linq `Except` with multiple properties with different class

Il metodo "Except" delle liste non permette di trovare la differenza tra le classi, se queste hanno due o più proprietà.
Possiamo utilizzare l'istruzione Linq per effettuare la differenza tra due liste di oggetti con due o più proprietà.

Supponiamo di avere due liste di oggetti che hanno una serie di proprietà, questi oggetti contengono n dati e vogliamo verificare che i dati presenti in uno non ci sono nell'altro. Per esempio gli oggetti mappano due tabelle con le stesse colonne ma che si vuole vedere la differenza tra il primo ed il secondo.

La classe che utilizzeremo come oggetto e lista è la seguente:

  public class Anagrafica
    {
        public string Nome { get; set; }
        public string Cognome { get; set; }
    }


Di seguito l'inizializzazione della classe con una ipotetica fonte dati:


 List<Anagrafica> AnagraficaOrigine = CaricaDati();

 List<Anagrafica> AnagraficaDestinazione = CaricaDati();

Dopo aver valorizzato i due oggetti con i dati per le due proprietà (nome e cognome) dobbiamo effettuare una select per vedere quali dati mancano nel secondo oggetto utilizzando le proprietà come condizione di scrematura dati.


 var risultato = AnagraficaOrigine .Where(a => !AnagraficaDestinazione .Any(b => a.Nome  == b.Nome && a.Cognome== b.Cognome));

L'oggetto "risultato" avrà i valori che non sono presenti nell'oggetto "AnagraficaDestinazione".

Nessun commento: