如何从一个表中获取数据,然后将其与其他表进行比较?

时间:2015-11-04 13:22:46

标签: asp.net-mvc entity-framework

我的“产品表”包含以下字段
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));
}

现在出现问题,ProductIDvar类型我无法将其与pid => pid.productid进行比较。
我想要做的是首先通过在product_id中将cart(登录用户)与uid_id进行比较,从user_id表中获取用户的所有cart表,然后显示product_id表中product个的产品详细信息。显然我需要存储多个product_id,以便我可以在购物车页面上填充他们的数据。

2 个答案:

答案 0 :(得分:0)

LINQ表达式db.cartDetails.Where(pid=>pid.productId==cart.productId && cart.user_id==session["user_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();

这会返回List productIds。 (如果您只希望获得一个productId,则可以使用SingleOrDefaultFirstOrDefault,具体取决于您的方案,例如db.cartDetails.SingleOrDefault(pid => ...).productId)。

另请注意,如果您期望整数,则可以使用int类型代替productId而不是var。现在,您将收集类型IQueryable<cardDetails>分配给productId

接下来,您不能再对返回的List使用等于运算符,您应该检查此列表是否包含来自productId的{​​{1}},如下所示:

productDetails

无法测试此代码,但基本想法就在这里。

最后一点,考虑在两个表之间使用连接:https://msdn.microsoft.com/en-us/library/bb311040.aspx

答案 1 :(得分:0)

这是否现在我的购物车工作正常

diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 0081dfc..8ec15c3 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -6676,6 +6676,9 @@ public final class ActivityManagerService  extends ActivityManagerNative
                             Slog.w(TAG, "Failed trying to unstop package "
                                     + cpr.appInfo.packageName + ": " + e);
                         }
+                       Slog.w(v, "startProcessLocked for cpi.processName = "+cpi.processName
+                           +"::cpi.applicationInfo.packageName=" + cpi.applicationInfo.packageName
+                            + " (Binder.getCallingPid()=" + Binder.getCallingPid());

                         ProcessRecord proc = startProcessLocked(cpi.processName,
                                 cpr.appInfo, false, 0, "content provider",
@@ -6692,6 +6695,7 @@ public final class ActivityManagerService  extends ActivityManagerNative
                         mLaunchingProviders.add(cpr);
                     } finally {
                         Binder.restoreCallingIdentity(origId);
+                        Slog.w(TAG, "Binder.getCallingPid() after restoreCallingIdentity(). pid=" + Binder.getCallingPid());
                     }
                 }