這是一個簡單的LINQ查詢(基於NorthWind),它返回一個Customers列表。每個客戶都包含訂單列表。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。爲每個客戶發出單獨的查詢。當你看看我們的lambda代碼:
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狀態的原因。但是,我嘗試過各種組合,但沒有成功。有任何想法嗎?
編輯: 我可能一直不清楚我想達到的目標。我希望OrderDetail對象是Order對象的屬性,它又是Customer對象的屬性。我不希望Order & OrderDetail是Customer的屬性。我正在嘗試獲取獨特客戶的名單。對於每個客戶,我期望訂單清單,並且對於每個訂單,我需要一個OrderDetails清單。我希望層次結構比我的原始查詢更深入一層。
雖然我不相信這個查詢可以進行後處理,以得到他所需要的,原來的問題意味着他想要一個結果per'Customer',其中每個結果都包含一個'OrderDetails'列表。 – jeremyalan 2009-09-04 17:59:08