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フィルタリングはこのオプションを有効にしますか?
次のような等価演算子を使用してnullと比較できます。
$filter=CustomerID eq null
あなたの場合、クエリは次のように縮退します:
$filter=(CustomerID eq null) or (null eq null)
うまくいくはずですが、それはあまり良くありません。そのような場合、述語を完全に削除することを検討しましたか?