Tengo una consulta L2E que devuelve algunos datos que contienen objetos duplicados. Necesito eliminar esos objetos duplicados. Básicamente, debería suponer que si sus identificaciones son las mismas, entonces los objetos son duplicados. He intentado q.Distinct()
, pero eso todavía devolvió objetos duplicados. Luego intenté implementar mi propio IEqualityComparer y pasarlo al método Distinct()
. El método ha fallado con el siguiente texto:¿Cómo implementar IEqualityComparer para devolver valores distintos?
LINQ a Entidades no reconoce el método 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1 [DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass ]) ' método, y este método no se puede traducir a una expresión de tienda.
Y aquí es la implementación de EqualityComparer:
internal class MyDOClassComparer: EqualityComparer<MyDOClass>
{
public override bool Equals(MyDOClass x, MyDOClass y)
{
return x.Id == y.Id;
}
public override int GetHashCode(MyDOClass obj)
{
return obj == null ? 0 : obj.Id;
}
}
Así que ¿Cómo escribo mi propia IEqualityComparer
correctamente?
1 Este es un protector de la vida, sin embargo, tenga en cuenta que no se puede utilizar. Primero() en su lugar, tendrá que usar .FirstOrDefault() –
¡Le debo una educación! Una de esas respuestas desearía poder subir la voz: ¡voto! – seebiscuit
@yoelhalb no garantiza GroupBy ninguna de las agrupaciones devueltas están vacías? No hay forma de que una de las agrupaciones devueltas esté vacía, ya que las agrupaciones se forman separando los elementos – vijrox