ここでは、Customersのリストを返す単純なLINQクエリ(NorthWindベース)を示します。各顧客には注文のリストが含まれています。LINQの階層型クエリ
from c in Customers
join o in Orders on c.CustomerID equals o.CustomerID into CO
select new {c, CO}
これはうまく動作し、生成されたSQLも正常です。今私は一歩進んで行きたいです。各OrderオブジェクトにOrderDetailsのリストが含まれるようにします。私は、次のクエリを使用しています:
from c in Customers
join od in (
from o in Orders
join od in OrderDetails on o.OrderID equals od.OrderID into OD
select new { o.CustomerID, o, OD }
)
on c.CustomerID equals od.CustomerID into COD
select new { c, COD }
このクエリは動作しますが、恐ろしいSQLを生成します。カスタマーごとに個別の照会が発行されます。あなたは私たちが持っているラムダコードを見てみると:
Customers
.GroupJoin (
Orders
.GroupJoin (
OrderDetails,
o => o.OrderID,
od => od.OrderID,
(o, OD) =>
new
{
CustomerID = o.CustomerID,
o = o,
OD = OD
}
),
c => c.CustomerID,
od => od.CustomerID,
(c, COD) =>
new
{
c = c,
COD = COD
}
)
ネストされたGroupJoinsは、複数のSQL statamentsの原因であるように見えます。しかし、私は成功せずに様々な組み合わせを試みました。何か案は?
編集: 私は達成しようとしていたことについて少し不明なことがありました。 OrderDetailオブジェクトをOrderオブジェクトのプロパティ(Customerオブジェクトのプロパティ)にします。注文& OrderDetailをCustomerのプロパティにしたくありません。私はユニークな顧客のリストを取得しようとしています。注文のリストに期待している顧客ごとに、注文ごとにOrderDetailsのリストが必要です。階層を元のクエリよりも一段深くしたい。
だけで、複数の結合を使用ないのはなぜ
私は元の質問は、彼が単一の結果を望んでいることを意味し、このクエリは、彼が必要とするものを得るために後処理することができることを信じていないがそれぞれの結果に 'OrderDetails'のリストが含まれています。 – jeremyalan