EF Distinct (IEqualityComparer) Error
.net, c#, c#-3.0, entity-framework, linq-to-entities
Solution
If you're providing your own comparisons, you'll need to execute the `Distinct` call in .NET code. To make sure that happens, use `AsEnumerable` to turn `IQueryable<T>` into `IEnumerable<T>`:
var result = myEntity.MyDomainEntity
.Where(myDomainEntity => myDomainEntity.MySpecialID > default(int))
.AsEnumerable()
.Distinct(new FooComparer());
Of course at that point you'll be pulling more data across from the database. An alternative is to group the data instead:
var result = from entity in myEntity.MyDomainEntity
where entity.MySpecialID > 0
group entity by entity.MySpecialID into groups
select groups.FirstOrDefault();
That will get you the first entity encountered with each ID (assuming my query-fu isn't failing me). That's basically what Distinct does anyway, but it's all at the database.
(Note to future readers: calling `First()` makes more sense than `FirstOrDefault()`, but apparently that doesn't work.)
Problem
Good Morning! Given: ``` public class FooClass { public void FooMethod() { using (var myEntity = new MyEntity) { var result = myEntity.MyDomainEntity.Where(myDomainEntity => myDomainEntity.MySpecialID > default(int)).Distinct(new FooComparer); } } } public class FooComparer : IEqualityComparer<MyEntity.MyDomainEntity> { public bool Equals(MyEntity.MyDomainEntity x, MyEntity.MyDomainEntity y) { return x.MySpecialID == y.MySpecialID; } public int GetHashCode(MyEntity.MyDomainEntity obj) { return obj.MySpecialID.GetHashCode(); } } ``` This will compile, but on runtime I will get an `Linq to Entity could not translate Comparer`-Exception. Any suggestions?