linq - una - contar valores repetidos en un array c#
Comprobación de duplicados en un objeto complejo utilizando la expresión Linq o Lambda (3)
Existe un operador linq Distinct (), que le permite filtrar hacia abajo a un conjunto distinto de registros si solo desea los identificadores. Si ha configurado su clase para sobrescribir equivale a usted o tiene un IEqualityComparer puede llamar directamente al método de extensión Distinct para devolver los resultados únicos de la lista. Como bonificación adicional, también puede usar los métodos Union e Intersect para fusionar o filtrar entre dos listas.
Otra opción sería agrupar por ID y luego seleccionar el primer elemento.
var results = from item in list
group item by item.id into g
select g.First();
Acabo de empezar a aprender expresiones linq y lambda, y parecen ser una buena opción para encontrar duplicados en una colección compleja de objetos, pero me confundo un poco y espero que alguien pueda ayudarme a volver al camino de la codificación feliz. .
Mi objeto está estructurado como list.list.uniqueCustomerIdentifier
Necesito asegurarme de que no haya un uniqueCustomerIdentifier duplicado en todo el objeto complejo. Si hay duplicados, necesito identificar cuáles están duplicados y devolver una lista de los duplicados.
Si desea aplanar las dos jerarquías de lista, use el método SelectMany
para aplanar un IEnumerable<IEnumerable<T>>
en IEnumerable<T>
.
- Desempaquetar la jerarquía
- Proyecte cada elemento a su propiedad uniqueID
- Agrupe estas identificaciones
- Filtra los grupos por grupos que tienen más de 1 elemento
- Proyecte cada grupo a la clave del grupo (de vuelta a uniqueID)
- Enumere la consulta y almacene el resultado en una lista.
var result =
myList
.SelectMany(x => x.InnerList)
.Select(y => y.uniqueCustomerIdentifier)
.GroupBy(id => id)
.Where(g => g.Skip(1).Any())
.Select(g => g.Key)
.ToList()