我有一个简单的LINQ-to-Entities查询,如下所示:
var BillingNumbers = from o in dbcontext.Orders
where SqlFunctions.IsNumeric(o.BillingNumber) == 1
select o.BillingNumber;
此查询大部分时间都有效。然而,最近我遇到了BillingNumber确实是数字的情况,但有一些尾随空格。此查询完全错过了这些值。
如果SqlFunctions.IsNumeric()
无法忽略尾随空格,有哪些替代方案?
.Net 4 / EF4 / VS2010
答案 0 :(得分:5)
你可以做到
where SqlFunctions.IsNumeric(o.BillingNumber.Trim()) == 1
转换为
WHERE (ISNUMERIC(LTRIM(RTRIM([Extent1].[BillingNumber])))) > 0
请注意这种查询方式不是sargable,因此如果您可以在此比较之前以任何其他方式缩小订单范围,请确保执行此操作!
答案 1 :(得分:2)
虽然我不喜欢在字符串中存储数字的想法,但由于你只是在寻找6位字符串,你可以这样做:
SqlFunctions.PatIndex("%[0-9][0-9][0-9][0-9][0-9][0-9]%", o.BillingNumber) > 0
虽然它会给你带有空格以外的数字的误报,但你可以调整它。