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 に答える