Molti metodi di LINQ accettano un tipo che implementa l'interfaccia IEqualityComparer per stabilire quando due oggetti sono uguali. Per default LINQ utilizza l'uguaglianza implicita del .NET Framework ovvero ritiene che due oggetti siano uguali se rappresentano la stessa istanza. Nella realtà, non è sempre così; se abbiamo due oggetti Ordine con lo stesso id per noi
sono identici.
Attraverso una classe che implementa l'interfaccia IEqualityComparer possiamo stabilire noi il criterio di uguaglianza tra oggetti.
public class LambdaComparer<T> : IEqualityComparer<T> { private readonly Func<T, T, bool> _lambda; private readonly Func<T, int> _hash public LambdaComparer(Func<T, T, bool> lambda) : this(lambda, o => 0) { } public LambdaComparer(Func<T, T, bool> lambda, Func<T, int> hash) { _lambda = lambda; _hash = hash; } public bool Equals(T x, T y) { return _lambda(x, y); } public int GetHashCode(T obj) { return _hash(obj); } }
Una volta creata la classe possiamo utilizzarla specificando il criterio di uguaglianza tramite lambda expression.
IEqualityComparer comparer = new LambdaComparer<Order>((x, y) => x.Id == y.Id); List<Order> x = orders.Distinct(comparer).ToList();
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Change tracking e composition in Entity Framework
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
I più letti di oggi
- Utilizzare il pattern matching per semplificare le espressioni
- Utilizzare requestAnimationFrame per animazioni fluide
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare WebJobs su Linux con Azure App Service
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!