2011-02-27 196 views
1

在我的數據庫,我有以下三個表:實體框架鏈接表

訂購
的OrderID
訂購日期
...

項目
項目ID
ITEMNAME
...

的OrderItems
的OrderID
項目ID
數量 ...

的OrderItems是一個鏈接/連接表。我有一個MVC頁面,我想要檢索訂單並顯示所有訂購的內容。我創建像這樣的查詢:

var order = (from o in db.Orders.Include("OrderItems.Item") 
      where o.OrderID == id 
      select o).SingleOrDefault(); 

現在我有一個視圖模型,看起來像:

public class OrderViewModel { 
    public Order Order { get; set; } 
    public IEnumerable<Item> Items { get; set; } 
} 

我如何獲得我創建從中提取的OrderItems收集的項目的查詢?

編輯
我真的希望是,如果我的模型,甚至沒有這個實體的。我想我的實體是:

訂購
項目

Order實體將直接擁有,而不必經過的OrderItems去的項目項的集合。不過,我不確定這是否可行。

回答

1

這個怎麼樣:

var order = (from o in db.Orders    
      where o.OrderID == id    
      select new OrderViewModel()       
       {        
       Order = o,        
       Items = o.OrderItems.Select(i => i.Item) 
       }).SingleOrDefault(); 

你並不需要調用Include查詢使用的導航性能,因爲你是投影結果你很可能不需要加載導航屬性Order

0

嘗試:

var order = (from o in db.Orders.Include("OrderItems.Item") 
      where o.OrderID == id 
      select new OrderViewModel() 
         { 
          Order = o, 
          Items = o.OrderItems.Item //maybe o.OrderItems.Item.ToList() 
         }).SingleOrDefault(); 
+0

不起作用。 OrderItems沒有Item屬性,因爲它是一個集合。 – Dismissile 2011-02-27 19:03:08