3

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

4

2 回答 2

5

你可以做

where SqlFunctions.IsNumeric(o.BillingNumber.Trim()) == 1

它转化为

WHERE (ISNUMERIC(LTRIM(RTRIM([Extent1].[BillingNumber])))) > 0

请注意,这种查询方式不是sargable,因此如果您可以在此比较之前以任何其他方式缩小订单范围,请确保您这样做!

于 2012-03-20T14:34:13.590 回答
2

虽然我不喜欢将数字存储在字符串中的想法,但由于您只是在寻找 6 位字符串,因此您可以执行以下操作:

SqlFunctions.PatIndex("%[0-9][0-9][0-9][0-9][0-9][0-9]%", o.BillingNumber) > 0

尽管它会给您带来除空格以外的数字的误报,但您可以对此进行调整。

于 2012-03-19T22:09:24.867 回答