I don\'t know how I can do several union with a distinct.
When I use .Distinct with an IEqualityComparer an exception in threw :
LINQ to Enti
The question answered but I just want to share my experience.
Not sure but I think the error message goes with saying Distinct method not supported with this argument I think.
In fact we just want Linq to SQL , a queryable expression that says if this properties same get one of them.
But when we use a class such as EqualityComparerTransaction it can't be translated to sql normally.
There is an another method GetDistict < T >(string propertyName) But sadly it doesn't work as we expected. This method also goes to DB(what else our source) and get some data and evaluate distinct.
If GetDistinct(string propertyName) extention method were do sql convertion operation It could be. But there is no way.
Sadly the single way of doing that is coding your own distinct extention for LINQ_TO_SQL.I don't think it will be easy! So Enumarating data on the server side seems easiest for now.
LINQ to Entities does not support the overload of Distinct
which takes an IEqualityComparer
. When you think about it, it really can't, because LINQ to Entities queries will be converted to SQL, and you cannot convert an interface reference to SQL.
Therefore, you must either:
Distinct
which does not take any compare, orBring both lists into object space and do the Distinct
in LINQ to Objects, like this:
var union = query.Union(query1).Union(query2);
union = union.AsEnumerable().Distinct(new EqualityComparerTransaction());
Naturally, the risk here is that you might bring too many records back from the DB server. You could also use both of these techniques in order to do a portion of the comparison on the server and another portion in object space.