Eliminar duplicados en la lista usando linq
Tengo una clase Items
con properties (Id, Name, Code, Price)
.
La Lista de Items
está llena de elementos duplicados.
Por ej.:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
¿Cómo eliminar los duplicados en la lista usando linq?
Aceptado
var distinctItems = items.GroupBy(x => x.Id).Select(y => y.First());
var distinctItems = items.Distinct();
Para hacer coincidir solo algunas de las propiedades, cree un comparador de igualdad personalizado, por ejemplo:
class DistinctItemComparer : IEqualityComparer<Item> {
public bool Equals(Item x, Item y) {
return x.Id == y.Id &&
x.Name == y.Name &&
x.Code == y.Code &&
x.Price == y.Price;
}
public int GetHashCode(Item obj) {
return obj.Id.GetHashCode() ^
obj.Name.GetHashCode() ^
obj.Code.GetHashCode() ^
obj.Price.GetHashCode();
}
}
Entonces úsalo así:
var distinctItems = items.Distinct(new DistinctItemComparer());
Si hay algo que está alterando su consulta Distinct, es posible que desee mirar MoreLinq y usar el operador DistinctBy y seleccionar objetos distintos por identificación.
var distinct = items.DistinctBy( i => i.Id );
Así es como pude agruparme con Linq. Espero eso ayude.
var query = collection.GroupBy(x => x.title).Select(y => y.FirstOrDefault());