Как реализовать IEqualityComparer для возврата отличных значений?

У меня есть запрос L2E, который возвращает некоторые данные, содержащие дубликаты объектов. Мне нужно удалить эти дубликаты. В принципе, я должен предположить, что если их идентификаторы одинаковы, то объекты являются дубликатами. Я попробовал q.Distinct(), но это все равно вернуло дубликаты объектов. Затем я попробовал реализовать свой собственный IEqualityComparer и передать его в метод Distinct(). Метод не сработал со следующим текстом:

LINQ to Entities не распознает метод 'System.Linq.IQueryable1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])'' метод, и этот метод не может быть переведен в выражение store.

А вот реализация 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;
        }
    }

Так как же мне правильно написать свой собственный IEqualityComparer?

44
задан Eranga 20 December 2011 в 08:08
поделиться