linq - EF : Is there way to force Linq using UNION instead of UNION ALL

标签 linq entity-framework

我将 Linq 与 Entity Framework 结合使用。

GetSet1<T>().Union(GetSet2<T>())

GetSetX 返回 IQueryable。

生成的 SQL 是 UNION ALL。但我知道联盟是实现我目标的好方法。实际上我的解决方法是:

GetSet1<T>().Union(GetSet2<T>()).Distinct()

在这种情况下生成的 sql 如下:

select distinct Field...
from (
    select distinct Field...
    union all
    select distinct Field...
) unionall

我知道(因为这就是人们的想法)

select Field...
union
select Field...

是最好的查询。那么有没有一种方法(我实际上可以找到)让 EntityFramework 使用 UNION 而不是 UNION ALL ?

==========

1:添加<T>为了更精确

最佳答案

Union() 方法应返回不重复的结果。根据查询,EF 将生成带有 DISTINCTUNION ALL 或仅生成 UNION,因此您的显式 Distinct() > 没有必要。 UNION ALL 的 Linq 等效项是 Concat()

除此之外,EF 还曾为查询生成低效的 SQL。如果可以的话,您应该使用 EF 5.0,它极大地改进了查询 SQL 生成。

关于linq - EF : Is there way to force Linq using UNION instead of UNION ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398126/

相关文章:

c# - 在 JSON 中解析 LINQ 答案

c# - linq distinct 并选择新查询

entity-framework - 对Entity Framework 4.1的生成器感到困惑

asp.net-mvc - DbContext 已被释放并且 autofac

.net - 在现有数据库上创建表

c# - 添加 Controller 时无法获取元数据mvc4

c# - LINQ to Entities 使用 .date 分组失败

c# - LINQ to XML 到数据表

entity-framework - 类型 'Context' 不是从 'System.Data.Entity.Migrations.DbMigrationsConfiguration' 继承的。使用 EF 迁移

C# Linq 如何选择数据表中多列的不同行数