将 int 转换为字符串 linqToENTITIES

本文关键字:字符串 linqToENTITIES 转换 int | 更新日期: 2023-09-27 18:37:20

我对 Convert.ToInt32/Parse.Int 有一些问题,我在 DB 的列是 varchar 类型,我需要与带有>= 运算符的 Int32 类型进行比较。这是我正在使用的一些代码,希望你能帮助我。

var municipio = this.MunicipioRepository.Find(x => ((Int32.Parse(cep) >=   
                                                    Int32.Parse(x.CEPInicial))) &&
                            ((Int32.Parse(cep) <= Int32.Parse(x.CEPFinal))));

非常感谢。

将 int 转换为字符串 linqToENTITIES

简短的回答是"你不能"。

长答案是:EF 尝试将使用各种 Linq 方法创建的表达式树转换为 Sql。

EF 提供程序不知道如何将 Int32.Parse 或 Convert.ToInt32 转换为 SQL,这就是阻止你的原因。

您唯一能做的,但它可能是性能杀手,就是从数据库中读取您需要比较的所有项目,将它们具体化,从那时起,您的查询将是 Linq2Objects 而不是 Linq2Entities,允许您使用任何您想要的东西。

但是,在您的示例中,这将导致具体化整个表。如果表是一个小查找没有问题,否则这真的会杀死你的应用程序。

要实现这一点,只需在Find之前拨打ToArray()ToList()电话。

但是,如果您有机会在数据库上工作,则可以做更干净的事情。您可以在表上创建一个计算列,将转换后的字符串值返回到整数,然后在 EF 模型中映射此新列并将其用于比较,这样您就可以将 INT 与 INT 进行比较,而无需任何强制转换,它将工作并且性能方面要好得多。当然,cep参数也应该是整数,并且应该在 Linq 查询之外转换它,以便可以毫无问题地使用它。