gpt4 book ai didi

c# - 将linq中的字符串转换为int到大数据库上的实体

转载 作者:太空狗 更新时间:2023-10-30 01:24:01 25 4
gpt4 key购买 nike

我想在 linq 中将字符串转换为 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;

错误说无法翻译convert方法

LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.

什么解决方案

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

最佳答案

我认为以字符串形式进行比较是非常安全的,除非你的年份 < 1000 或 > 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;

那么查询引擎就不能使用索引来进行长度比较,但它可以为 > 比较使用索引。

关于c# - 将linq中的字符串转换为int到大数据库上的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com