Eu tenho uma aula Items
com properties (Id, Name, Code, Price)
.
A lista de Items
é preenchida com itens duplicados.
Por exemplo:
1 Item1 IT00001 $100
2 Item2 IT00002 $200
3 Item3 IT00003 $150
1 Item1 IT00001 $100
3 Item3 IT00003 $150
Como remover as duplicatas da lista usando linq?
c#
linq
linq-to-objects
generic-list
Prasad
fonte
fonte
var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));
. Deve ser criminoso para fazê-lo ..Respostas:
Para corresponder apenas a algumas das propriedades, crie um comparador de igualdade personalizado, por exemplo:
Em seguida, use-o assim:
fonte
GroupBy
não podia.XoR
operador^
em C #. Tinha usado no VB.NET via,Xor
mas tinha que fazer uma olhada duas vezes no seu código para ver o que era inicialmente.1[DataAccess.HR.Dao.CCS_LOCATION_TBL] Distinct[CCS_LOCATION_TBL](System.Linq.IQueryable
1 [DataAccess.HR.Dao.CCS_LOCATION_TBL], System.Collections.Generic.IEqualityComparer`1 [ DataAccess.HR.Dao.CCS_LOCATION_TBL]) ', e esse método não pode ser convertido em uma expressão de armazenamento.fonte
Se houver algo que está descartando sua consulta Distinct, convém consultar o MoreLinq e usar o operador DistinctBy e selecionar objetos distintos por ID.
fonte
Foi assim que consegui me agrupar com o Linq. Espero que ajude.
fonte
FirstOrDefault
aqui não oferece nenhum benefício se oSelect
segue imediatamenteGroupBy
, já que não há possibilidade de haver um grupo vazio (os grupos foram apenas derivada de conteúdo da coleção)Use,
Distinct()
mas lembre-se de que ele usa o comparador de igualdade padrão para comparar valores; portanto, se você quiser algo além disso, precisará implementar seu próprio comparador.Consulte http://msdn.microsoft.com/en-us/library/bb348436.aspx para obter um exemplo.
fonte
Você tem três opções aqui para remover itens duplicados da sua lista:
Distinct(new DistinctItemComparer())
como @Christian Hayter mencionado.Use
GroupBy
, mas observe queGroupBy
você deve Agrupar por todas as colunas, porque, se você apenas agrupar porId
elas, nem sempre remove itens duplicados. Por exemplo, considere o seguinte exemplo:O resultado para este agrupamento será:
O que está incorreto porque é considerado
{Id = 3, Name = "Item3", Code = "IT00004", Price = 250}
duplicado. Portanto, a consulta correta seria:Substituir
Equal
eGetHashCode
na classe de item:Então você pode usá-lo assim:
fonte
Um método de extensão universal:
Exemplo de uso:
fonte
Experimente este método de extensão. Espero que isso possa ajudar.
Uso:
fonte
fonte
Outra solução alternativa, não é bonito comprar viável.
Eu tenho um arquivo XML com um elemento chamado "MEMDES" com dois atributos como "GRADE" e "SPD" para registrar as informações do módulo de RAM. Existem muitos itens duplos no SPD.
Então, aqui está o código que eu uso para remover os itens duplicados:
fonte
Quando você não deseja escrever o IEqualityComparer, tente algo como o seguinte.
fonte