У меня есть запрос L2E, который возвращает некоторые данные, содержащие повторяющиеся объекты. Мне нужно удалить эти повторяющиеся объекты. В принципе, я должен предположить, что если их идентификаторы одинаковы, объекты дублируются. Я пробовал q.Distinct()
, но это все равно возвращало повторяющиеся объекты. Затем я попытался реализовать свой собственный IEqualityComparer и передать его методу Distinct()
. Метод потерпел неудачу с текстом:Как реализовать IEqualityComparer для возврата отдельных значений?
LINQ к Entities не распознает метод «System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1 [DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass ]) ' , и этот метод не может быть переведен в выражение хранилища.
А вот реализация 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
правильно?
+1 Это спасатель, однако обратите внимание, что вы не можете использовать. Сначала() вместо этого вам придется использовать .FirstOrDefault() –
Я должен вам образование! Один из тех ответов, на которые я хотел бы высказать свое мнение! – seebiscuit
@yoelhalb не гарантирует GroupBy ни одна из возвращенных групп не пуста? Нет способа, чтобы одна из возвращаемых групп была пустой, так как группировки формируются путем выделения элементов – vijrox