【问题标题】:error 'Int32 ToInt32(System.String)'错误'Int32 ToInt32(System.String)'
【发布时间】:2014-10-20 15:00:57
【问题描述】:

我添加了后续操作以获取符合 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);
}

我收到以下错误

LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且>此方法无法转换为存储表达式。

需要一个解决方案。

【问题讨论】:

  • 你试过 Int32.Parse() 代替吗?
  • 将值转换为 int 然后将该值传递给表达式。但是为什么不直接将参数 int 改为字符串,这样您就不需要进行任何转换(DefaultModelBiner 会为您完成)
  • 感谢斯蒂芬的帮助。有用。为什么我在表达式中将其转换为 int32 不起作用。
  • 查询必须能够转换为实际的SQL语句,但C#方法不能转换为SQL

标签: asp.net-mvc-4


【解决方案1】:

解决方案 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();

您可以随意将您自己的演员验证添加到这两种解决方案中。

【讨论】:

    【解决方案2】:

    这样做。

      int catId = Convert.ToInt32(CategoryId);
      var data = db.products.Where(d => d.CategoryID == catId).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多