代码
显示错误,例如“不包含ID的定义”[HttpPost]
public ActionResult show(List<int> ids)
{
if (ids != null)
{
int[] brands = ids.ToArray();
var brandId = _db.Brands.Where(p => brands.Contains(p.ID));
var srtItems = _db.Products.Where(p => p.CategoryID == brandId.ID);
return PartialView("_pView", srtItems);
}
}
并且对于以下代码,错误是“不包含Contains的定义”
[HttpPost]
public ActionResult show(List<int> ids)
{
if (ids != null)
{
int[] brands = ids.ToArray();
var brandId = _db.Brands.Where(p => brands.Contains(p.ID));
var sortItemss = _db.Products.Where(p => brandId.Contains(p.CategoryID));
return PartialView("_pView", srtItems);
}
请指导我
答案 0 :(得分:5)
这是var
成为所有邪恶的根源的地方,因为它隐藏了真实的数据类型。删除var,你会立即注意到这个问题:
int[] brands = ids.ToArray();
IQueryable<Brand> brandId = _db.Brands.Where(p => brands.Contains(p.ID));
IQueryable<Product> srtItems = _db.Products.Where(p => p.CategoryID == brandId.ID);
brandId
是一个序列(在实现时)并且它不是单个对象,因此它不包含ID
的定义。
要解决这个问题,您可以:
IQueryable<int> brandIds = _db.Brands.Where(p=> brands.Contains(p.ID)).Select(b=> b.ID);
IQueryable<Product> srtItems = _db.Products.Where(p=> brandIds.Contains( p.CategoryID));
获取检索到的记录的ID,并按这些ID进行匹配。
作为建议,请不要使用var
,除非真实类型是多余的(意味着它显示在语句的其他部分)