c# - Linq 到实体 : Unions + Distinct

标签 c# linq-to-entities union distinct

我不知道如何用不同的方式进行多个联合。

当我将 .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 不支持采用 IEqualityComparerDistinct 重载。仔细想想,确实不行,因为 LINQ to Entities 查询会被转换为 SQL,而你不能将接口(interface)引用转换为 SQL。

因此,您必须:

  1. 使用不进行任何比较的 Distinct 的重载,或者
  2. 将两个列表放入对象空间并在 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/

相关文章:

c# - 通过两个代理的 HttpWebRequest

c# - 使用 Properties.Default.Settings 时,应用程序会在 namespace 中创建 "_"的文件夹

sql - 在 Oracle 中合并两个查询

mysql - 如何组合两个不同的 mysql where 子句,每个子句产生 5 行

c# - 在RichTextBox中更改颜色

c# - 访问在安装时通过 Windsor 解析的类型

c# - 如何将 Group By SQL 转换为 LINQ?

c# - 性能 : . Join 与 .Contains - Linq to Entities

linq - Linq to Entities 是 ORM 吗?

mysql - union 和 limit 的不正确使用