Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何从一个表中获取数据,然后将其与另一个表进行比较?_Asp.net Mvc_Entity Framework - Fatal编程技术网

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子句,不管怎样,你甚至没有礼貌地投票赞成引导你找到解决方案的答案。这会阻止人们帮助他人。