2011-12-11 185 views
0

我正在使用Include擴展來實現LINQ to Entity。以多對一和一對多的關係實現LINQ to Entity

我有以下方案:

enter image description here

這是我的第一個LINQ(它工作正常):

var query = ctx1.Order_Details.Include("Order").Select(o => new 
      { o.OrderID, 
       o.ProductID, 
       o.Order.OrderDate, 
       o.Order.OrderNumber 
       }); 

這裏是我的第二LINQ(不工作):

Error Cannot convert lambda expression to type 'string' because it is not a delegate type

我的問題是爲什麼當我在「多對一」關係中實現Linq時LINQ可以正常工作,並且當我嘗試實現LINQ「從內到外」時一對多)它不起作用?

回答

2

第一個查詢工作,因爲只有一個爲每個訂單細節相關訂單 - 你正在尋找從「N」的觀點(順序的關係細節)。

在你在1開始與「1」的第二個查詢:N的關係秩序和Order_Detail和你之間試圖讓一個單價 - 但有一個集合(以下簡稱「N」 )的相關聯合價格和數量。您目前的方法只適用於每個Order只有一個相關的Order_Detail

如果你想抓住相關的單價和數量的集合在你的匿名類型,你可以做這樣的事情:

var query2 = ctx1.Order.Include("Order_Details").Select(o => new 
      { o.OrderID, 
       o.CustomerID, 
       UnitPrices = o.Order_Details.Select(od => od.UnitPrice), 
       Quantities = o.Order_Details.Select(od => od.Quantity) 
       }); 
+0

BrokenGlass,謝謝你的回答,它是真的阻止了我,但鋼鐵缺少的東西。在我的第二個LINQ你寫的結果得到一個UnitPrice和一個QUANTITY.BUT爲什麼?我沒有使用我的LINQ過濾器或擴展方法,如.first()或.last()。我有點困惑,也許是因爲我不明白LINQ如何工作。請你! – Michael

+0

我說*你正在嘗試*獲得一個UnitPrice - 這就是爲什麼它不起作用 - 你將Order_Details當作單個對象處理,但它是一個集合 – BrokenGlass

0

只是一個猜測,但如何:

ctx1.Orders.... //not ctx1.Order 
+0

花錢,後多元化的,我得到2個另一個錯誤。 – Michael