将linq中的字符串转换为大数据库中的实体

我在linq中将字符串转换为int到实体但转换为.ToInt32和int.Parse无法转换为sql而且我的数据库是BIG而且无法将所有内容都放到内存中(超过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)’方法,并且此方法无法转换为存储表达式。

什么解决方案

更新:如果没有办法做到这一点,请让我确定这一点,然后我必须改变数据库中的字段类型,但它会很难:(

我认为将比较作为字符串是相当安全的,除非你有年<1000或> 9999:

 ... dr.stringYear.CompareTo(myNumberString) > 0 

优点是stringYear上的任何索引都可以在执行计划中使用。 将stringYear转换为数字可以消除任何索引。

这可行,但生成的SQL将是凌乱的

 int myNumber = 1390; var result = from dr in myEntitiy.TableX let num = myEntitiy.TableX.Take(1).Select(x => dr.stringYear).Cast().FirstOrDefault() where num > myNumber select dr;