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 ALL ではなく UNION を使用させる方法はありますか (実際には見つかりません)。

==========

1: を追加し<T>て精度を高める

4

1 に答える 1

12

Union()メソッドは、重複のない結果を返す必要があります。クエリに応じて、EF はUNION ALLwithDISTINCTまたは justUNIONのいずれかを生成するため、明示的なDistinct()ものは必要ありません。に相当する LinqUNION ALLは ですConcat()

それに加えて、EF にはクエリに対して非効率な SQL を生成してきた歴史があります。可能であれば、クエリ SQL 生成が大幅に改善された EF 5.0 を使用する必要があります。

于 2013-01-18T11:45:45.867 に答える