web-dev-qa-db-ja.com

ODataフィルターオプション(nullまたは空の値の処理)

ODataの$ filterシステムクエリオプションを使用して、実行時にフィルター値が送信されるフィルターを実行します。

例として、OData URLは次のようになります。

http://services.odata.org/Northwind/Northwind.svc/Customers ?$ filter = CustomerID eq @InCustomerID and Country eq @InCountry

ここで、@ InCustomerIDと@InCountryは、等しいフィルターの入力値です。

実行時にユーザーがカスタマーIDの値を入力すると(たとえば、「ABCD」)、@ InCustomerIDを「ABCD」に置き換えます。

実行時のクエリは次のようになります。

http://services.odata.org/Northwind/Northwind.svc/Customers ?$ filter = CustomerID eq 'ABCD' and Country eq 'US'

上記の場合、ユーザーは次の値を入力しました:CustomerID => 'ABCD' and Country => 'US'

私の質問は、OData $ filterでのnull値の処理に関するものです。ユーザーがCustomerIDに値を入力しない場合、特定の国のすべての顧客を選択します。

SQLの場合、これは次のようになります。

((CustomerID = @InCustomerID)または(@CustomerID is null))および(Country = @Country)の顧客から*を選択します。

基本的に、論理条件の特定の述語が常にtrueになるようにnullまたは空の値を処理する方法。

ODataフィルタリングはこのオプションを有効にしますか?

23
Venki

次のような等価演算子を使用してnullと比較できます。

$filter=CustomerID eq null

あなたの場合、クエリは次のように縮退します:

$filter=(CustomerID eq null) or (null eq null)

うまくいくはずですが、それはあまり良くありません。そのような場合、述語を完全に削除することを検討しましたか?

30