none
Buscar distintos de varias propiedades RRS feed

  • Pregunta

  • tengo la siguiente clase

    public class Employee
        {
            public int Id { get; set; }
            public int IdBonus { get; set; }
            public DateTime Date { get; set; }
            public string Name { get; set; }
        }

    y estoy llenando una lista de esta manera

    private List<Employee> GetListEMployees()
            {
                Employee Gustavo = new Employee()
                {
                    Id = 1,
                    Date = new DateTime(1981, 7, 7),
                    IdBonus = 1,
                    Name = "Gustavo"
                };
    
                Employee Pedro = new Employee()
                {
                    Id = 2,
                    Date = new DateTime(1981, 7, 7),
                    IdBonus = 1,
                    Name = "Pedro"
                };
    
                Employee Perla = new Employee()
                {
                    Id = 3,
                    Date = new DateTime(1982, 12, 7),
                    IdBonus = 10,
                    Name = "Perla"
                };
    
                Employee Felipe = new Employee()
                {
                    Id = 4,
                    Date = new DateTime(1992, 2, 4),
                    IdBonus = 6,
                    Name = "Felipe"
                };
    
                List<Employee> employees = new List<Employee>();
                employees.Add(Gustavo);
                employees.Add(Pedro);
                employees.Add(Perla);
                employees.Add(Felipe);
    
                return employees;
            }

    como pueden ver Gustavo y Pedro tienen la misma propiedad Date osea el mismo valor

    y tambien el mismo valor en la propiedad IdBonus

    entonces que busco lograr

    Filtrar la lista por los que son distintos en esas propiedades IdBonos, y date que serian Felipe y Perla.

    y también filtrar por los que son iguales que serian Gustavo y Pedro.

    y tambien regresar un Bool si existen iguales que por ejemplo si existe gustavo y pedro regresar true y si no estuvieran regresar false.

    Intente usar esto.

    public class EmployeeComparerById : IEqualityComparer<Employee>
        {
            public bool Equals(Employee x, Employee y)
            {
                return x.Id == y.Id;
            }
    
            public int GetHashCode(Employee obj)
            {
                return obj.Id.GetHashCode();
            }
        }
    
        public class EmployeeComparerByIdBonus : IEqualityComparer<Employee>
        {
            public bool Equals(Employee x, Employee y)
            {
                return x.IdBonus == y.IdBonus;
            }
    
            public int GetHashCode(Employee obj)
            {
                return obj.IdBonus.GetHashCode();
            }
        }
    
        public class EmployeeComparerByDate : IEqualityComparer<Employee>
        {
            public bool Equals(Employee x, Employee y)
            {
                return x.Date == y.Date;
            }
    
            public int GetHashCode(Employee obj)
            {
                return obj.IdBonus.GetHashCode();
            }
        }

    creando las clases de comparación pero el metodo Distinct no me permite pasarle las 3 clases solo una.

    Podrían apoyarme con este tema

    De antemano muchas Gracias

    jueves, 23 de agosto de 2018 20:41

Respuestas

  • hola

    >>creando las clases de comparación pero el metodo Distinct no me permite pasarle las 3 clases solo una.

    porque usas el Distinct para esto ? porque no usas linq

    >>Filtrar la lista por los que son distintos en esas propiedades IdBonos, y date que serian Felipe y Perla.

    porque no aplicas el group by de linq

     Sentencias en LINQ (III): Agrupaciones (group by)

    con este puedes agrupar los items que coinciden en alguna propiedad

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta niqel viernes, 24 de agosto de 2018 14:54
    jueves, 23 de agosto de 2018 21:39