EF:有没有办法强制Linq使用UNION而不是UNION ALL

tsc*_*007 4 linq entity-framework

我将Linq与实体框架一起使用.

GetSet1<T>().Union(GetSet2<T>())
Run Code Online (Sandbox Code Playgroud)

GetSetX返回IQueryable.

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

GetSet1<T>().Union(GetSet2<T>()).Distinct()
Run Code Online (Sandbox Code Playgroud)

在这种情况下生成的sql就像:

select distinct Field...
from (
    select distinct Field...
    union all
    select distinct Field...
) unionall
Run Code Online (Sandbox Code Playgroud)

我知道(因为这是被认为的方式)

select Field...
union
select Field...
Run Code Online (Sandbox Code Playgroud)

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

==========

1:添加<T>更多精度

Car*_*lis 8

Union()方法应该返回没有重复的结果.根据查询,EF将生成UNION ALLwith DISTINCT或just UNION,因此Distinct()不需要显式.LINQ的当量UNION ALLConcat().

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