Eliminar duplicados en la lista usando linq

Resuelto Prasad asked hace 15 años • 11 respuestas

Tengo una clase Itemscon properties (Id, Name, Code, Price).

La Lista de Itemsestá 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?

Prasad avatar Oct 22 '09 18:10 Prasad
Aceptado
var distinctItems = items.GroupBy(x => x.Id).Select(y => y.First());
Freddy avatar Nov 04 '2010 08:11 Freddy
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());
Christian Hayter avatar Oct 22 '2009 11:10 Christian Hayter

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 );
tvanfosson avatar Oct 22 '2009 12:10 tvanfosson

Así es como pude agruparme con Linq. Espero eso ayude.

var query = collection.GroupBy(x => x.title).Select(y => y.FirstOrDefault());
Victor Juri avatar Mar 10 '2011 15:03 Victor Juri