我将 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 将生成带有 DISTINCT
的 UNION 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/