Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq to entities : Unions + Distinct

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 Entities does not recognize the method 'System.Linq.IQueryable'

My code is

var union = query.Union(query1).Union(query2);
union = union.Distinct(new EqualityComparerTransaction());
like image 681
lu2vik Avatar asked Feb 19 '10 14:02

lu2vik


1 Answers

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:

  1. Use the overload of Distinct which does not take any compare, or
  2. Bring 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.

like image 169
Craig Stuntz Avatar answered Oct 05 '22 20:10

Craig Stuntz