Linq to entities:Unions + Distinct

lu2*_*vik 10 c# union linq-to-entities distinct

我不知道我怎么能做一些与众不同的联盟.

当我使用带有IEqualityComparer的.Distinct时抛出异常:

LINQ to Entities无法识别方法'System.Linq.IQueryable'

我的代码是

var union = query.Union(query1).Union(query2);
union = union.Distinct(new EqualityComparerTransaction());
Run Code Online (Sandbox Code Playgroud)

Cra*_*ntz 9

LINQ to Entities不支持其重载Distinct需要IEqualityComparer.当你考虑它时,它确实不能,因为LINQ to Entities查询将被转换为SQL,而你无法将接口引用转换为SQL.

因此,您必须:

  1. 使用其中的重载Distinct不进行任何比较,或
  2. 将两个列表放入对象空间并Distinct在LINQ to Objects中执行,如下所示:

    var union = query.Union(query1).Union(query2);
    union = union.AsEnumerable().Distinct(new EqualityComparerTransaction());
    
    Run Code Online (Sandbox Code Playgroud)

当然,这里的风险是您可能会从DB服务器返回太多记录.您还可以使用这两种技术,以便在服务器上执行部分比较,在对象空间中执行另一部分.