我对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))));
非常感谢你。
答案 0 :(得分:0)
简短的回答是“你不能”。
答案很长:EF尝试将使用各种Linq方法创建的表达式树转换为Sql。
EF提供程序不知道如何将Int32.Parse或Convert.ToInt32转换为SQL,这就是阻止你的行为。
你可以做的唯一的事情,但它可能是一个性能杀手,是阅读你需要从DB比较的所有项目,实现它们,从那时起你的查询将是Linq2Objects而不是Linq2Entities,允许你使用你想要的任何东西。
但是,在您的示例中,这将导致实现整个表格。如果表是一个小查找没问题,但否则这可能会真正杀死你的应用程序。
要实现此目的,只需在ToArray()
之前发出ToList()
或Find
来电。
但是,如果您有机会使用数据库,那么您可以做得更干净。您可以在表上创建一个计算列,将转换后的字符串值返回到整数,然后在EF模型中映射此新列并将其用于比较,这样您就可以将INT与INT进行比较而无需任何转换,并且会工作,并在性能方面更好。当然,你的cep
参数也应该是整数,你应该在Linq查询之外转换它,这样你就可以毫无问题地使用它。