4

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

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

GetSetX 返回 IQueryable。

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

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>更精确

4

1 回答 1

12

Union()方法应该返回没有重复的结果。根据查询,EF 将生成UNION ALLwithDISTINCT或 just UNION,因此您的显式Distinct()不是必需的。的 Linq 等价物UNION ALLConcat().

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

于 2013-01-18T11:45:45.867 回答