ASP.NET MVC:无法隐式转换string到int——ViewModel三元运算符问题
解决LINQ查询中ViewModel三元运算符赋值的问题
我来帮你搞定这个问题!先看你代码里的几个关键错误,咱们一步步修正:
1. 先修正基础语法错误
你原来的LINQ查询在对象初始化时写错了语法——多了一个多余的右括号,而且属性赋值用了分号(对象初始化器里多个属性用逗号分隔,单个属性则不需要分隔符)。
2. int类型直接比较即可
你的p.RegionId是int类型,直接和1(int字面量)比较完全没问题,不需要转成字符串或者额外的类型转换——之前的那些转换尝试反而画蛇添足,甚至可能因为LINQ to Entities不支持某些本地方法导致报错。
正确的代码示例
// 如果你要获取单个ViewModel对象,记得加FirstOrDefault/SingleOrDefault var model = (from p in _context.ProductGun where p.ProductId == productId select new GunViewModel { RegionId = p.RegionId == 1 ? "DEV" : "TEST" }).FirstOrDefault();
额外注意点
- 确认你的
GunViewModel里的RegionId属性是string类型,因为你赋值的是"DEV"/"TEST"字符串;如果ViewModel的RegionId是int类型,那这个赋值肯定会报错,这时候要调整ViewModel属性类型或者三元运算符的返回值(比如改成对应int值)。 - 原查询返回的是
IQueryable<GunViewModel>集合,如果你的productId对应单个产品,一定要加上FirstOrDefault()/SingleOrDefault()来获取单个对象,否则model会是集合类型,不符合预期。
内容的提问来源于stack exchange,提问作者Big. D
相关产品推荐
相关产品推荐

