none
Consulta usando DISTINCT para Lista de Objetos genéricos RRS feed

  • Pergunta

  • Estou com problema em solucionar uma consulta na minha lista de objetos...

    O problema é o seguinte, tenho uma classe "Usuario" que é carregada mediante a um grupo de consultas, destes pode ser que o mesmo usuário apareça mais de uma vez, por exemplo

    objeto 1:

    Username: silva_jc / Nome: Joao Carlos da Silva

    objeto 2:

    Username: santos_jc / Nome: Joao Carlos dos Santos

    objeto 3:

    Username: silva_jc / Nome: Joao Carlos da Silva

    Sendo assim, gostaria de realizar uma consulta onde o resultado seria objeto1 e objeto2..... o Objeto 3 seria descartado pois possui o mesmo username do objeto 1.

    segunda-feira, 10 de dezembro de 2012 16:29

Respostas

  • Olá,

    Vc precisa criar uma classe que implemente IEqualityComparer, para especificar como o agrupamento deve ocorrer.

    Veja o exemplo abaixo:

        class UserEqualityComparer : IEqualityComparer<User>
        {
            public bool Equals(User b1, User b2)
            {
                if (b1.Id == b2.Id & b1.Name == b2.Name)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public int GetHashCode(User bx)
            {
                int hCode = bx.Id;
                return hCode.GetHashCode();
            }
        }
        class User 
        {
            public string Name { get; set; }
            public int Id { get; set; }       
        }
        class Program
        {
            static void Main(string[] args)
            {
                List<User> users = new List<User>();
                users.Add(new User() { Name = "A", Id=1});
                users.Add(new User() { Name = "B", Id=2});
                users.Add(new User() { Name = "A", Id=1});
                var result = users.Distinct(new UserEqualityComparer());
            }
        }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Ives F. Bertoli segunda-feira, 25 de fevereiro de 2013 12:58
    terça-feira, 11 de dezembro de 2012 15:55
    Moderador