我试图从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");
}
}
提前致谢!
答案 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