将Int转换为字符串LinqToENTITIES

时间:2015-01-13 18:43:17

标签: c# entity-framework linq-to-entities

我对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))));

非常感谢你。

1 个答案:

答案 0 :(得分:0)

简短的回答是“你不能”。

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

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

你可以做的唯一的事情,但它可能是一个性能杀手,是阅读你需要从DB比较的所有项目,实现它们,从那时起你的查询将是Linq2Objects而不是Linq2Entities,允许你使用你想要的任何东西。

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

要实现此目的,只需在ToArray()之前发出ToList()Find来电。

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