使用SqlFunctions.IsNumeric(),其中是否存在尾随空格?

时间:2012-03-19 21:33:53

标签: c#-4.0 linq-to-entities sqlclient

我有一个简单的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

2 个答案:

答案 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

虽然它会给你带有空格以外的数字的误报,但你可以调整它。