このクエリを作成すると:
context.Orders.Where(x => context.Customers.Where(c => c.PersonID ==
10002).Select(c => c.CustomerID.Value).Contains(x.CustomerID.Value)).ToList();
次のようなクエリを作成することを期待しています:
select * from Orders where CustomerID in (select CustomerID from Customers
Where PersonID = 10002)
ただし、生成されたクエリは次と同等です。
select * from Orders o where Exists(select 1 from Customers c where
c.PersonID = 10002 and c.CustomerID = o.CustomerID)
これは非常に単純なクエリで、次のように記述できます。
context.Orders.Where(x => x.Customer.PersonID == 10002).ToList()
しかし、私の実際のシナリオはそうではありません。また、この単純なクエリでは実行時間に違いはありませんが、より複雑なケースでは、予想されるクエリがはるかに高速に実行されます。
どうすれば EF にクエリを希望どおりに使用させることができますか?