2014-10-04 107 views
0

我目前正在爲一個學校項目建立一個網上商店,我將ID存儲到我的模型中,並在我的購物車對象(在會話中)。 當顧客想要看他們的購物車時,我需要將ID轉換爲產品以在視圖中顯示。一種解決方案是首先獲取所有產品,然後再次通過列表來添加計數,但是沒有更好的方法將函數中已有的計數添加到我的存儲庫中嗎?MVC 5 C# - 將<ModelID,value>列表轉換爲列表<Model,value>

public class CartItem 
{ 
    public int ProductID { get; set; } 
    public int Count { get; set; } 
} 

我把這個模型放在我的ViewModel中,是正確的方法還是存在這樣的數據結構?

public class CartProduct 
{ 
    public Product Product { get; set; } 
    public int Count { get; set; } 
} 

如何,我可以輕鬆地添加到我的倉庫裏的方法誰是我的CartItems的列表轉換CartProducts的名單未做往返於數據庫的每個條目?

對不起,混亂的標​​題和解釋,只有在C#編程2個星期。

回答

2

首先得到Product S上車的物品從數據庫:

var prodIds = cartItems.Select(c => c.ProductID).ToList(); 

其中cartItems是車中的項目您在會話集合。

var productsOfItems = db.Products 
         .Where(p => prodIds.Contains(p.ProductID) 
         .ToList(); 

現在,創建視圖模型:

var cartProducts = 
(from p in productsOfItems 
join c in cartItems on p.ProductID equals c.ProductID 
select new CartProduct { 
          Product = p, 
          Count = c.Count 
         }).ToList(); 
+0

得到它的工作,謝謝:) – Amiga 2014-10-06 11:32:14

0

你需要更具體。如果您使用的是像實體框架或nhibernate的ORM,則可以按產品ID進行分組,然後選擇您的cartproduct模型和計數。

public static List<Client> GetClientsWithTotalOrders() 
    { 
     //create DataContext object, use it, discard it: 
     using (CodeProjectDataContext db = new GetDataContext()) 
     { 
      //join Client with Order: 
      var res = db.Clients // db is the data context 
       .Join(
       db.Orders, 
       o => o.ID, 
       c => c.ClientID, 
       (c, o) => new { c } 
       ) 

       //group by Client 
       .GroupBy(o => o.c) 

       //define output object 
       .Select(o => new { ID = o.Key.ID, AddressID = o.Key.AddressID, 
       Name = o.Key.Name, TotalOrders = o.Count() }) 
       // here you won't select an anonymous type, 
       // you will select o => new CartProduct { Count = o.Count(), 
       // Product = new Product { // map your properties } } 
       //output to List of objects: 
       .ToList() 
       ; 

      //cast the output sequence to List of Clients and return: 
      return (List<Client>)res; 
     } 
    }; 
相關問題