C# – Como contar itens duplicados em listas genéricas.

É muito comum você precisar encontrar os itens distintos de uma lista genérica e é uma coisa muito fácil de fazer usando o Linq, precisei fazer algo parecido um dia desses em um projeto, vou deixar como dica, nunca se sabe quando iremos precisar.

No meu caso precisava saber se existiam objetos com propriedades iguais na minha coleção para efetuar uma validação, é mais ou menos o cenário abaixo.

Primeiro vamos criar uma classe chamada Pessoa bem simples:

public class Pessoa
{
        public Pessoa(int id, string nome, string sobrenome)
	{
		this.Id = id;
		this.Nome = nome;
		this.SobreNome = sobrenome;
	}
	public int Id { get; set; }
	public string Nome { get; set; }
	public string SobreNome { get; set; }
}

Depois vamos criar uma lista com algumas “Pessoas” e listar em tela três valores:

  • a quantidade de itens duplicados com mesmo id, nome e sobrenome;
  • a quantidade de itens duplicados com mesmo nome e sobrenome;
  • a quantidade de itens duplicados somente com o mesmo sobrenome.
  • class Program
    {
    static void Main(string[] args)
    {
    	List<Pessoa> pessoas = new List<Pessoa>();
    	pessoas.Add(new Pessoa(1,"Jose","Silva"));
    	pessoas.Add(new Pessoa(2,"Maria","Gomes"));
    	pessoas.Add(new Pessoa(1,"Jose","Silva"));
    	pessoas.Add(new Pessoa(3,"Roberto","Justus"));
    	pessoas.Add(new Pessoa(4,"Alice","Silva"));
    	pessoas.Add(new Pessoa(1,"Jose","Silva"));
    
    	int itens_duplicados = pessoas
    		.GroupBy(p => new { p.Id, p.Nome, p.SobreNome })
    		.Where(x => x.Count() > 1)
    		.Sum(x => x.Count());
    
    	int itens_duplicados_por_nome_e_sobrenome = pessoas
    		.GroupBy(p => new { p.Nome, p.SobreNome })
    		.Where(x => x.Count() > 1)
    		.Sum(x => x.Count());
    			
    	int itens_duplicados_por_sobrenome = pessoas
    		.GroupBy(p => new { p.SobreNome })
    		.Where(x => x.Count() > 1)
    		.Sum(x => x.Count());
    
    	Console.WriteLine("Itens duplicados: " + itens_duplicados);
    	Console.WriteLine("Itens com mesmo nome e sobrenome: " + itens_duplicados_por_nome_e_sobrenome);
    	Console.WriteLine("Itens com mesmo sobrenome: " + itens_duplicados_por_sobrenome);
    	Console.ReadLine();
    }
    }
    

    itensDuplicados

    É isso ae se gostou ou ajudou comenta para incentivar!!
    Um abraço.