我想从产品的关系匹配数据中将列表返回到我的部分视图。我附上了edmx文件的图片,你可以了解他们的关系状态!问题是我只是不知道我怎么能写这个查询或我需要任何迭代过程来做到这一点。主要目标是:我想获得当前用户已添加书签的所有产品。欢迎任何问题。提前致谢
[ChildActionOnly]
[Authorize]
public PartialViewResult _UserBookmark(string id)
{
using (mydb db = new mydb())
{
int userId = db.Users.Where(x => x.Email == id).FirstOrDefault().UserId;//here i am getting user primary key id
var ProductIds = db.Bookmarks.Where(x => x.UserId == userId).ToList();//here i am getting all Product primary keys under that user
var ListOfProducts = db.Products.Where(x=>x.ProductId == "i dont know how to do it") // here i wanted to return matched all products
return PartialView("_UserBookmark",ListOfProducts);
}
}
答案 0 :(得分:1)
您可以使用.Contains
语句返回ProductId
集合中ProductIds
所在的产品。
将方法更改为
[ChildActionOnly]
[Authorize]
public PartialViewResult _UserBookmark(string id)
{
using (mydb db = new mydb())
{
int userId = db.Users.Where(x => x.Email == id).FirstOrDefault().UserId;
// Get a collection of the ProductId's
IEnumerable<int> ProductIds = db.Bookmarks
.Where(x => x.UserId == userId).Select(x => x.ProductId);
IEnumerable<Product> ListOfProducts = db.Products
.Where(x => ProductIds.Contains(x.ProductId))
return PartialView("_UserBookmark", ListOfProducts);
}
}
注意,如果结果是针对当前用户的,那么请考虑让方法中的当前用户将Email
传递给方法。另请注意,.FirstOrDefault().UserId
会抛出异常,因为您向方法传递的值不正确,导致User
为null
。