2016-03-05 36 views
0

我試圖做一個典型的網上商店,到目前爲止一切工作,但我得到了以下問題:如何將List中的重複數據庫值替換爲數量,並將它們列入ListView?例如如果我在購物車中添加兩個相同的產品,我希望能夠顯示數量,而不是在購物車清單中顯示兩個相同的產品。如何將表中的重複值替換爲「數量」?

PS:我在ListView中列出了我的結果。

(用於購物車的Form_Load):

using (eShopEntities db = new eShopEntities()){ 

      var list = new List<Product>(db.Products.ToList()); 

      var listFilter = new List<Product>(); 

      foreach (var id in list) 
      { 
       foreach (var Sessions in SessionData)//got selected products stored in sessions 
       { 
        if (id.ID == Sessions) 
        { 

         listFilter.Add(id); //Add all selected products(via session) 
        } 
       } 
      } 

      int TotSum = 0; 
      foreach (var sum in listFilter) 
      { 
       TotSum = TotSum + sum.Price; 

      } 

      cartListView.DataSource = listFilter; cartListView.DataBind(); 

      lblSum.Text = TotSum.ToString(); 


      } 

現在,一切都被列在ASPX。但我不知道如何替換重複的數量從listFilter 發送量子數據連同從listFilter結果cartListWiev togheter。

我的產品表(SQL):ID(PK),名稱,ImagePath的,價格和CatergoryID(FK)

感謝

+0

var result = list.GroupBy(x => x.Name).select({y => new Product(){Name = y.Name,Price = y.Sum(y1 => y1.Price)}})。ToList();我想你正在尋找基於名稱的GroupBy。 – Rangesh

+0

謝謝,但我不能讓它的工作,得到以下錯誤的「選擇」部分:「無法解析符號'選擇'/」IEnumerable <| Igrouping <字符串,產品>>不包含'選擇'的定義...「 。我不知道如何解決這個問題。 – Nyprez

+0

添加System.Linq引用並嘗試搜索linq grouby sum,它必須幫助你。 – Rangesh

回答

1

作爲可能性之一(不是強制性的最好的一個,但在技術上它應該可以)你可以改變你的代碼:

using (eShopEntities db = new eShopEntities()){ 

      IDictionary<long, int> productQuantities = new Dictionary<long, int>(); // supposed your product.ID is of type long 
      var list = new List<Product>(db.Products.ToList()); 

      var listFilter = new List<Product>(); 

      foreach (var id in list) 
      { 
       foreach (var Sessions in SessionData)//got selected products stored in sessions 
       { 
        if (id.ID == Sessions) 
        { 
         if (!productQuantities.ContainsKey(id.ID)) // new 
         { 
         listFilter.Add(id); //Add all selected products(via session) 
         productQuantities.Add(id.ID, 1) 
         } // new else { 
         productQuantities[id.ID]++; // new       
         } 
        } 
       } 
      } 

      int TotSum = 0; 
      foreach (var sum in listFilter) 
      { 
       // TotSum = TotSum + sum.Price; // old 

       sum.Quantity = productQuantities[id.ID]; // supposed your class Product has corresponding property for quantities 
       TotSum = TotSum + sum.Price * sum.Quantity; 
      } 

      cartListView.DataSource = listFilter; cartListView.DataBind(); 

      lblSum.Text = TotSum.ToString(); 


      } 
+0

這是一個很好的解決方案,結果中不再顯示重複內容。 ,我不知道如何正確使用productQuantities並在ListView中顯示其結果以及listFilter,因爲我不熟悉字典 我妥協了這部分,爲Product-table添加了一個Quantity屬性,但我必須重置它的值到0這裏和那裏然後,我不知道這是一個正確的方式,我真的認爲productQuantities + listFilter組合是要走的路,是否有很好的方法來做到這一點? – Nyprez

+0

嗨@Nyprez,謝謝你的回覆。使用** Product.Quantity **屬性,這只是一個示例,您可以將數量考慮在內。如果你只需要數量來計算總和,你可以這麼做:'TotSum = TotSum + productQuantities [id.ID]'。如果您需要在listView中顯式顯示數量,則可以例如更新您的產品名稱(僅適用於ListView),如'sum.Name = sum.Name +''+ productQuantities [id.ID]'。由於數量只是暫時需要的,因此沒有必要將其作爲字段添加到數據庫表中。 –

相關問題