Используйте SqlFunctions.IsNumeric (), где присутствуют конечные пробелы? - PullRequest
3 голосов
/ 20 марта 2012

У меня есть простой запрос 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 ]

5 голосов
/ 20 марта 2012

Вы можете сделать

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

Это означает

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

Помните, что этот способ запроса не sargable , так что если выперед сравнением можете сузить ваши заказы любым другим способом, обязательно сделайте это!

2 голосов
/ 20 марта 2012

Хотя мне не нравится идея хранить числа в строках, так как вы ищете только 6-значные строки, вы можете сделать что-то вроде этого:

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

Хотя это даст вам ложные срабатывания для чисел с вещами, отличными от пробелов, но вы можете подстроиться под это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...