Asp.net mvc 4 错误';Int32到Int32(System.String)和#x27;

Asp.net mvc 4 错误';Int32到Int32(System.String)和#x27;,asp.net-mvc-4,Asp.net Mvc 4,我添加了以下操作,以使产品符合cat.id [HttpPost] public ActionResult OnlineHome(string CategoryId) { OnlineDataModel dm = new OnlineDataModel(); dm.CatagoryData = new List<category>(); dm.ProductData = new List<product>(); dm.CatagoryData = db.ca

我添加了以下操作,以使产品符合cat.id

[HttpPost]
public ActionResult OnlineHome(string CategoryId)
{
  OnlineDataModel dm = new OnlineDataModel();
  dm.CatagoryData = new List<category>();
  dm.ProductData = new List<product>();
  dm.CatagoryData = db.categories.ToList();
  //dm.ProductData = (from p in db.products where p.CategoryID == Convert.ToInt32(CategoryId) select p).ToList() ;
  var data= db.products.Where(d => d.CategoryID == Convert.ToInt32(CategoryId)).ToList();
  return View(dm);
}
[HttpPost]
public ActionResult OnlineHome(字符串类别ID)
{
OnlineDataModel dm=新的OnlineDataModel();
dm.CatagoryData=新列表();
dm.ProductData=新列表();
dm.CatagoryData=db.categories.ToList();
//dm.ProductData=(从db.products中的p开始,其中p.CategoryID==Convert.ToInt32(CategoryID)选择p).ToList();
var data=db.products.Where(d=>d.CategoryID==Convert.ToInt32(CategoryID)).ToList();
返回视图(dm);
}
我得到以下错误

LINQ to Entities无法识别方法“Int32到Int32(System.String)”方法,并且>无法将此方法转换为存储表达式

需要解决这个问题。

像这样做

  int catId = Convert.ToInt32(CategoryId);
  var data = db.products.Where(d => d.CategoryID == catId).ToList();
解决方案1:

首先尝试声明整数变量:

int iCategoryId = Convert.ToInt32(CategoryId);
然后将代码更新为:

var data= db.products.Where(d => d.CategoryID == iCategoryId).ToList();
解决方案2(建议):

确保您的操作接收整数并修改变量的类型:

public ActionResult OnlineHome(int CategoryId)
然后以相同的方式将代码更新为:

var data = db.products.Where(d => d.CategoryID == CategoryId).ToList();

您可以将自己的强制转换验证添加到这两个解决方案中。

您是否尝试过使用Int32.Parse()替代?将值转换为int,然后将该值传递给表达式。但是为什么不把参数
int
改为字符串,这样您就不需要进行任何转换了(DefaultModelBiner将为您进行转换)谢谢stephen的帮助。它起作用了。为什么在表达式中将其转换为int32时不起作用。查询必须能够转换为实际的SQL语句,但C#method不能转换为SQL