Если вы предоставляете свои собственные сравнения, вам нужно выполнить вызов Distinct
в .NET-коде. Чтобы это произошло, используйте AsEnumerable
, чтобы превратить IQueryable<T>
в IEnumerable<T>
:
var result = myEntity.MyDomainEntity
.Where(myDomainEntity => myDomainEntity.MySpecialID > default(int))
.AsEnumerable()
.Distinct(new FooComparer());
Конечно, в этот момент вы будете извлекать больше данных из базы данных. Альтернативой является группировка данных:
var result = from entity in myEntity.MyDomainEntity
where entity.MySpecialID > 0
group entity by entity.MySpecialID into groups
select groups.FirstOrDefault();
Это даст вам первую сущность, обнаруженную с каждым идентификатором (при условии, что мой запрос-фу меня не подводит). Это в основном то, что Distinct делает в любом случае, но это все в базе данных.
(Примечание для будущих читателей: звонить по номеру First()
имеет больше смысла, чем FirstOrDefault()
, но, очевидно, это не работает.)