AsEnumerable并不起作用

时间:2015-09-25 04:10:45

标签: c# asp.net linq

我正在为我们的学校项目建立一个购物车项目,我找到了一个很棒的教程,但我一直坚持将产品添加到我的购物车中。

我想要的是,当已添加产品的用户无法再添加时。

我认为这是在会话中检查数据表中的ProductID时的一部分 这是我的代码:

protected void btnaddtocart_Click(object sender, EventArgs e)
{        
   string ProductID = Convert.ToInt16((((Button)sender).CommandArgument)).ToString();
   string ProductQuantity = "1";

   DataListItem currentItem = (sender as Button).NamingContainer as DataListItem;
   Label lblavailablestock = currentItem.FindControl("lblavailablestock") as Label;

   if (Session["MyCart"] != null)
   {
       DataTable dt = (DataTable)Session["MyCart"];
       var checkproduct = dt.AsEnumerable().Where(r => r.Field<string>("ProductID") == ProductID); 

        // I think this line above is the error because it always proceeds on adding the product.
       if (checkproduct.Count() == 0)
       {
           string query = "select * from Products where ProductID =  " + ProductID;
           DataTable dtproducts = GetData(query);

           DataRow dr = dt.NewRow();
           dr["ProductID"] = LinkButton2.Text;
           dr["Name"] = Convert.ToString(dtproducts.Rows[0]["Name"]);
           dr["Description"] = Convert.ToString(dtproducts.Rows[0]["Description"]);
           dr["Price"] = Convert.ToString(dtproducts.Rows[0]["Price"]);
           dr["ImageUrl"] = Convert.ToString(dtproducts.Rows[0]["ImageUrl"]);
           dr["ProductQuantity"] = ProductQuantity;
           dr["AvailableStock"] = lblavailablestock.Text;

           dt.Rows.Add(dr);

           Session["MyCart"] = dt;
           lblitems.Text = dt.Rows.Count.ToString();
       }          
   }       
   else
   {
       string query = "select * from Products where ProductID = " + ProductID;
       DataTable dtproducts = GetData(query);

       DataTable dt = new DataTable();

       dt.Columns.Add("ProductID", typeof(string));
       dt.Columns.Add("Name", typeof(string));
       dt.Columns.Add("Description", typeof(string));
       dt.Columns.Add("Price", typeof(string));
       dt.Columns.Add("ImageUrl", typeof(string));
       dt.Columns.Add("ProductQuantity", typeof(string));
       dt.Columns.Add("AvailableStock", typeof(string));

       DataRow dr = dt.NewRow();
       dr["ProductID"] = ProductID;
       dr["Name"] = Convert.ToString(dtproducts.Rows[0]["Name"]);
       dr["Description"] = Convert.ToString(dtproducts.Rows[0]["Description"]);
       dr["Price"] = Convert.ToString(dtproducts.Rows[0]["Price"]);
       dr["ImageUrl"] = Convert.ToString(dtproducts.Rows[0]["ImageUrl"]);
       dr["ProductQuantity"] = ProductQuantity;
       dr["AvailableStock"] = lblavailablestock.Text;

       dt.Rows.Add(dr);

       Session["MyCart"] = dt;
   }

   highlightproduct();
}

非常感谢所有能帮助我的人! :)

2 个答案:

答案 0 :(得分:1)

您在购物车中检查的ProductID与您添加到购物车的价值不同。一个是命令参数,另一个是按钮文本。

答案 1 :(得分:0)

我认为你需要从datatable获取行来查询

var checkproduct = dt.Rows.AsEnumerable().Where(r => r.Field<string>("ProductID") == ProductID);