使用实体模型减去数量

时间:2015-11-28 00:50:40

标签: c# asp.net entity-framework linq

我试图从List中的数量中减去“Inventory”表中的字段“QtyOnHand”。但是我得到了这个错误:

无法将'System.Collections.Generic.List`1 [System.Int32]'类型的对象强制转换为'System.IConvertible'。

它显示错误发生在:

var cartQty =(from i in item in i.ProductId == Convert.ToInt32(productId)select i.Qty).SingleOrDefault();

我的代码如下:

protected void btnCheckout_Click(object sender, EventArgs e)
    {
        int inventoryQty;

        List<Item> items = Session["Cart"] as List<Item>;

        using (ProjectEntities myEntities = new ProjectEntities())
        {
            var productId = (from i in items select i.ProductId).ToList();

            var cartQty = (from i in items where i.ProductId == Convert.ToInt32(productId) select i.Qty).SingleOrDefault();

            var inventory = (from q in myEntities.Inventories
                            where q.ProductId == Convert.ToInt32(productId)
                            select q).SingleOrDefault();

            inventoryQty = inventory.QtyOnHand - cartQty;

            myEntities.SaveChanges();
            Response.Redirect("~/Home.aspx");
        }
    }

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

var productId =(from i in items select i.ProductId).ToList();

productId变量包含一个项目列表,您试图将其传递给Convert.ToInt32方法,该方法不期待项目集合!这导致了这个问题。

由于您的购物车可能包含多个商品,因此您可能需要循环使用productIds并进行其他计算。

var productIdList = (from i in items select i.ProductId).ToList();
foreach(var productId in productIdList)
{
   var cartQty = (from i in items where i.ProductId ==  Convert.ToInt32(productId) 
                                                        select i.Qty).SingleOrDefault();
  // Your remaining code
} 

我假设购物车商品中的productId是数字值,但是字符串类型。那么只有Convert.ToInt32才能正常工作,因为它需要一些有效数值的字符串表示(Ex :"234"

如果是int类型,则在where子句中不需要Convert.ToInt32(productId)部分,只需使用i.ProductId==productId