我不知道如何用不同的方式进行多个联合。
当我将 .Distinct 与 IEqualityComparer 一起使用时,抛出异常:
LINQ to Entities does not recognize the method 'System.Linq.IQueryable'
我的代码是
var union = query.Union(query1).Union(query2);
union = union.Distinct(new EqualityComparerTransaction());
最佳答案
LINQ to Entities 不支持采用 IEqualityComparer
的 Distinct
重载。仔细想想,确实不行,因为 LINQ to Entities 查询会被转换为 SQL,而你不能将接口(interface)引用转换为 SQL。
因此,您必须:
- 使用不进行任何比较的
Distinct
的重载,或者 将两个列表放入对象空间并在 LINQ to Objects 中执行
Distinct
,如下所示:var union = query.Union(query1).Union(query2); union = union.AsEnumerable().Distinct(new EqualityComparerTransaction());
当然,这里的风险是您可能从数据库服务器带回太多记录。您也可以同时使用这两种技术,以便在服务器上进行一部分比较,在对象空间中进行另一部分比较。
关于c# - Linq 到实体 : Unions + Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296966/