我想将 linq toEntity 中的字符串转换为 int,但 Convert.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)”方法,并且此方法无法转换为存储表达式。
有什么解决办法
更新 :
如果没有办法做到这一点,请让我确定这一点,然后我必须更改数据库中的字段类型,但这会很困难:(
我认为以字符串形式进行比较是非常安全的,除非你的年数 9999:
... dr.stringYear.CompareTo(myNumberString) > 0
EF 将其转换为 SQL 谓词,例如
WHERE [alias].[stringYear] > @p
这在 SQL 中可行,但在 C# 中不行。
一个优点是任何索引stringYear
可以在执行计划中使用。转换stringYear
数字消除任何索引。
当字符串列包含锯齿状字符串值时,此方法仍然有用。在这种情况下,谓词应与长度结合起来。例如,查找任何数字字符串作为整数大于某个参考值的所有实体
var len = myNumberString.Lenght;
var query =
from row in context.LegacyTable
where row.NumericString.CompareTo(myNumberString) > 0
&& row.NumericString.Length >= len
select row;
那么查询引擎就不能使用索引来进行长度比较,但它可能可以使用索引来进行长度比较。>
比较。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)