是否有办法强制Linq使用UNION而不是UNION ALL ?



我使用Linq与entity-framework。

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

GetSetX返回iquerable .

生成的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将生成UNION ALLDISTINCT或仅生成UNION,因此没有必要显式地生成Distinct()。与UNION ALL对应的Linq是Concat()

除此之外,EF有为查询生成低效SQL的历史。如果可以的话,应该使用EF 5.0,它大大改进了查询SQL的生成。

相关内容

  • 没有找到相关文章

最新更新