lunedì 17 ottobre 2022

C# LINQ to get items in one List<>, that are not in another List<>

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

Ora che i due oggetti contengono 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: