Asp.net mvc 如何从一个表中获取数据,然后将其与另一个表进行比较?
我有带有以下字段的“产品表”Asp.net mvc 如何从一个表中获取数据,然后将其与另一个表进行比较?,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有带有以下字段的“产品表” PID int, 产品名称varchar(), 产品价格整数 带有以下字段的“购物车表” 购物车ID 用户id PID 所以我想显示登录用户的购物车项目 例如,如果用户_ID=100已登录,则只应向其显示其购物车项目以及所有产品详细信息。 Am使用asp.net和实体框架 public ActionResult Cart() { Products pro = new Products(); Cart cart =new Cart(); va
PID int,
产品名称varchar(),
产品价格整数
带有以下字段的“购物车表”
购物车ID
用户id
PID 所以我想显示登录用户的购物车项目
例如,如果用户_ID=100已登录,则只应向其显示其购物车项目以及所有产品详细信息。
Am使用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
进行比较我想做的是首先通过比较
uid\u id
(登录用户)和cart
表中的user\u id
,从cart
表中获取用户的所有product\u id
,然后显示product
表中那些product\u id
的产品详细信息。因此,显然我需要存储多个product\u id
,以便在购物车页面上填充它们的数据。LINQ表达式db.cartDetails.Where(pid=>pid.productId==cart.productId&&cart.user\id==session[“user\u id”])
将返回cartDetails
的集合,而不是productId
。您必须使用select
来获取所需的列,如下所示
var productIDs = db.cartDetails
.Where(pid => pid.productId == cart.productId && cart.user_id == session["user_ID"])
.Select(cd => cd.productId)
.ToList();
这将返回产品ID的列表
。(如果您只希望获得一个productId,则可以使用SingleOrDefault
或FirstOrDefault
,具体取决于您的场景,如db.cartDetails.SingleOrDefault(pid=>…).productId
)
还请注意,如果您需要整数,则可以对productId
使用int
类型,而不是使用var
。现在,您将获得分配给productId
的集合类型IQueryable
接下来,您不能再对返回的列表
使用相等运算符,您应该检查此列表是否包含productDetails
中的productId
,如下所示:
return View(db.productsDetails.Where(pid => productIDs.Contains(pid.productId)));
无法测试此代码,但基本思想如下
最后一件事,考虑使用两个表之间的连接:
<强>此,现在我的手推车工作得很好< <强> > BR>
public ActionResult Cart()
List<int> productIDs = new List<int>();
productIDs = db.cartDetails.Where(ch => ch.userId ==12).Select(cd => cd.productId).ToList() ;
List<Products> pDetails = new List<Products>();
for(int i=0;i<productIDs.Count;i++)
{
pDetails.Add(db.productsDetails.Find(productIDs[i]));
}
return View(pDetails);
public ActionResult购物车()
List productIDs=新列表();
productId=db.cartDetails.Where(ch=>ch.userId==12).Select(cd=>cd.productId.ToList();
List pDetails=新列表();
对于(int i=0;i您定义产品和购物车并且从不使用。您需要做的就是在您的CartViewModel上定义一个产品列表,用购物车中的产品填充该列表并将CartViewModel返回到视图。我假定db是您的上下文,这也不应该保持打开状态。好的,这样做还需要ProductID,因为在美国有多个产品您只需要在ViewModel上定义一个产品列表我尝试了以下代码
LIST productIDs=new LIST();productIDs=db.cartDetails.Where(pid=>pid.productId==Cart.productId&&Cart.user\id==session[“user\u id”])。选择(cd=>cd.productId)托利斯先生();
如何在此列表中存储productId列表?如果db.cartDetails中的productId是一个int,上面的代码会将productId保存在变量productId中。如果您遇到错误,您可以共享它吗?我尝试过,但列表是空的,虽然我在数据库中有数据,但productId仍然是空的。为什么不删除该变量e.Where(…)子句,以查看在执行此操作时是否提取了productId:db.cartDetails.Select(cd=>cd.productId.ToList()??如果它有效,但不适用于Where,则Where子句中存在问题?事实上,与上面的答案相同,db.ProductDetails.Where()比调用db.ProductDetails.Find()效率更高在for循环中。实际的问题在于你的Where子句,不管怎样,你甚至没有礼貌地投票赞成引导你找到解决方案的答案。这会阻止人们帮助他人。