将 Int 转换为字符串 LinqToENTITIES

Converting Int to String LinqToENTITIES

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

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

非常感谢。

简短的回答是 "you can't"。

长答案是:EF 尝试将您使用各种 Linq 方法制作的表达式树翻译成 Sql。

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

你唯一能做的,但它可能会成为性能杀手,就是从数据库中读取你需要比较的所有项目,具体化它们,从那时起你的查询将是 Linq2Objects 而不是 Linq2Entities,让你随心所欲。

不过,在您的示例中,这将导致实现整个 table。如果 table 是一个小查找没问题,否则这真的会杀死你的应用程序。

要实现这一点,只需在 Find.

之前放置一个 ToArray()ToList() 调用

但是,如果您有机会处理数据库,您可以做一些更干净的事情。您可以在 table 上创建一个计算列,将 returns 转换后的字符串值转换为整数,然后将这个新列映射到您的 EF 模型中并将其用于比较,这样您就可以只比较 INT到 INT 不需要任何转换,它会工作并且在性能方面会更好。当然你的 cep 参数也应该是一个整数,你应该在 Linq 查询之外转换它,这样你就可以毫无问题地使用它。