我的“产品表”包含以下字段
PID int,
product_name varchar(),
product_price int
“购物车表”,包含以下字段
cart_ID
USER_ID
PID
所以我想显示登录用户的购物车项目
例如,如果登录了user_ID = 100,那么只应向他显示他的购物车商品,并附上所有产品详细信息。
使用带有实体框架的asp.net
public ActionResult Cart()
{
Products pro = new Products();
Cart cart =new Cart();
var productID=db.cartDetails.Where(pid=>pid.productId==cart.productId && cart.user_id==session["user_ID"]);
return View(db.productsDetails.Where(pid => pid.productId == productID));
}
现在出现问题,“ProductID”是var类型,我无法将其与“pid => pid.productid”进行比较。
如何在int List中存储productid,以便我可以将它与产品表中的单个产品进行比较以显示产品详细信息?
答案 0 :(得分:0)
尝试在检查之前转换它
修改强>
db.cartDetails.Where(pid=>pid.productId==cart.productId
这将返回产品对象或其他东西,因此需要将代码更改为
var product = db.cartDetails.Where(pid=>pid.productId==cart.productId).FirstOrDefault();
if(product!= null){
return View(db.productsDetails.Where(pid => pid.productId == product.productID));
}
答案 1 :(得分:0)
db.cartDetails.Where(pid=>pid.productId==cart.productId) returns a `WhereListIterator<CartDetail>` object.
所以你需要做类似的事情 -
var productID=db.cartDetails.Where(pid=>pid.productId==cart.productId).FirstOrDefault();
return View(db.productsDetails.Where(pid => pid.productId == productID.productID));
答案 2 :(得分:0)
你可以试试这个
修改:
首先,您不能直接将会话[&#34; user_ID&#34;]与int数据类型字段进行比较,就像您在评论中所做的那样cart.user_id==session["user_ID"]
请按照更新的代码进行操作。
var userID = Convert.ToInt32(Session["user_ID"]); //And please check first session is null or not than go ahead.
//Here as you said now you can compare productID and userId as follow.
//And if these both conditions will be satisfied than you will get cartDetails table first record otherwise it will return null value
var cartDetail = db.cartDetails.Where(pid => pid.productId == cart.productId && pid.user_id == userID).FirstOrDefault();
if(cartDetail != Null)
{
return View(db.productsDetails.Where(pid => pid.productId == cartDetail.productID));
}
FirstOrDefault()返回序列的第一个元素,如果序列不包含元素,则返回默认值。
我的第一行代码会返回int
productID,如果它不为空。