Tengo una clase Itemscon properties (Id, Name, Code, Price).
La lista de Itemsse rellena con 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?
c#
linq
linq-to-objects
generic-list
Prasad
fuente
fuente

var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));. Debería ser criminal hacerlo ...Respuestas:
Para hacer coincidir solo algunas de las propiedades, cree un comparador de igualdad personalizado, por ejemplo:
Entonces úsalo así:
fuente
GroupByno podía.XoRoperador^en C #. Lo había usado en VB.NET a través de,Xorpero tuve que hacer una doble toma de su código para ver qué era al principio.1[DataAccess.HR.Dao.CCS_LOCATION_TBL] Distinct[CCS_LOCATION_TBL](System.Linq.IQueryable1 [DataAccess.HR.Dao.CCS_LOCATION_TBL], System.Collections.Generic.IEqualityComparer`1 [ DataAccess.HR.Dao.CCS_LOCATION_TBL]) ', y este método no se puede traducir a una expresión de tienda.fuente
Si hay algo que está desechando su consulta Distinct, es posible que desee mirar MoreLinq y usar el operador DistinctBy y seleccionar objetos distintos por id.
fuente
Así es como pude agruparme con Linq. Espero eso ayude.
fuente
FirstOrDefaultaquí no ofrece ningún beneficio siSelectsigue inmediatamenteGroupBy, ya que no hay posibilidad de que haya un grupo vacío (los grupos se derivaron del contenido de la colección)Use,
Distinct()pero tenga en cuenta que usa el comparador de igualdad predeterminado para comparar valores, por lo que si desea algo más allá de eso, debe implementar su propio comparador.Consulte http://msdn.microsoft.com/en-us/library/bb348436.aspx para ver un ejemplo.
fuente
Aquí tiene tres opciones para eliminar elementos duplicados de su lista:
Distinct(new DistinctItemComparer())como mencionó @Christian Hayter .Utilizar
GroupBy, pero tenga en cuentaGroupByque debe Agrupar por todas las columnas porque si solo agrupa porIdél no siempre elimina los elementos duplicados. Por ejemplo, considere el siguiente ejemplo:El resultado para esta agrupación será:
Lo cual es incorrecto porque se considera
{Id = 3, Name = "Item3", Code = "IT00004", Price = 250}duplicado. Entonces la consulta correcta sería:3. Anular
EqualyGetHashCodeen la clase de elemento:Entonces puedes usarlo así:
fuente
Un método de extensión universal:
Ejemplo de uso:
fuente
Prueba este método de extensión. Espero que esto pueda ayudar.
Uso:
fuente
fuente
Otra solución alternativa, no hermosa compra viable.
Tengo un archivo XML con un elemento llamado "MEMDES" con dos atributos como "GRADE" y "SPD" para registrar la información del módulo RAM. Hay muchos artículos duplicados en SPD.
Así que aquí está el código que uso para eliminar los elementos duplicados:
fuente
Cuando no desee escribir IEqualityComparer, puede intentar algo como lo siguiente.
fuente