SelectMany
LINQPad で生成された SQL を使用してクエリを作成し、チェックしています。クエリは非常に単純です。
、、、という 3 つのエンティティがCustomer
あるOrder
としOrderItem
ます。OrderItem
注文された製品と数量に関する情報を保持します。
OrderItems
一人のお客様のためにすべてを手に入れたい。
context.Customers.First().Orders.SelectMany(o=>o.OrderItems)
期待どおりの結果セットが得られますが、SQL は私にとって本当に奇妙です。選択ステートメントがたくさんあります。最初に 1 人の顧客を選択しますが、これで問題ありません。OrderItem
次に、1 つの Order を選択し (この顧客には 1 つしかないため)、以前に選択したものごとに 1 つの選択を作成しOrder
ます。したがって、次のようになります。OrderItems
Orders
Customer
select top 1 from Customers;
select * from Orders where CustomerID = @cID;
select * from OrderItems where OrderID = @o1;
select * from OrderItems where OrderID = @o2;
select * from OrderItems where OrderID = @o3;
select * from OrderItems where OrderID = @o4;
私が期待するのは次のようなものです:
select oi.*
from OrderItems oi
join Orders o on o.OrderID = oi.OrderId
join Customers c on c.CustomerID = o.CustomerID
where c.CustomerID = @someID
ワンセレクト、素敵できれい。
本当にそのように機能しますかSelectMany
、それとも何か間違ったことをしているのですか、それとも私のモデルに何か問題があるのでしょうか? SelectMany
そのような単純なものを SQL に変換する方法の例はどこにも見つかりません。
これは少数の場合は問題ではありませんが、顧客がそれぞれ 200 の注文アイテムで 100 の注文を行う場合、20,000 の選択があります...