我将linq中的字符串转换为int实体但转换为.ToInt32和int.Parse无法转换为sql 而且我的数据库很大,无法将所有内容都记录下来(超过60k的记录并变大) 我的查询类似于
int myNumber = 1390;
var result = from dr in myEntitiy.TableX
where (Convert.ToInt32(dr.stringYear) > myNumber) // <== error
select dr;
错误说不能翻译转换方法
LINQ to Entities无法识别方法'Int32 ToInt32(System.String)'方法,并且此方法无法转换为商店表达式。
最新解决方案
更新: 如果没有办法做到这一点,请确认这一点,然后我必须更改数据库中的字段类型,但这将很难:(
答案 0 :(得分:3)
我认为将比较作为字符串是相当安全的,除非你有多年&lt; 1000或&gt; 9999:
... dr.stringYear.CompareTo(myNumberString) > 0
优点是stringYear
上的任何索引都可以在执行计划中使用。将stringYear
转换为数字可以消除任何索引。
答案 1 :(得分:1)
这样可行,但生成的SQL会很混乱
int myNumber = 1390;
var result = from dr in myEntitiy.TableX
let num = myEntitiy.TableX.Take(1).Select(x => dr.stringYear).Cast<int>().FirstOrDefault()
where num > myNumber
select dr;