web-dev-qa-db-ja.com

ODataクエリの$ filter条件と大文字と小文字の区別

ODataは、文字列フィールドのフィルター条件を大文字と小文字を区別して評価するか、大文字と小文字を区別せずに評価するかを指定しますか?

例:(ドキュメントから)

/Suppliers?$filter=Address/City eq 'Redmond' 

これは大文字と小文字が区別されるか、そうでないか?

両方のオプションを提供したい場合、これをどのように表現できますか?次のように使用できるtolower()関数があります。

/Suppliers?$filter=tolower(Address/City) eq 'redmond'

または

/Suppliers?$filter=tolower(Address/City) eq tolower('Redmond')

大文字と小文字を区別しないマッチングを表現するより簡潔な方法はありませんか?

23
eseib

"eq"演算子は大文字と小文字を区別することになっています。 tolower(またはtoupper)の使用は、現在推奨されている方法です。

19

ODataUriResolverでEnableCaseInsensitive = trueを設定することで、大文字と小文字を区別しない比較を実行できるようになりました。これをMicrosoft.AspNetCore.OData 7.1.0で使用しました。

     var oDataUriParser = new ODataUriParser(model, uri)
     {
        Resolver = new ODataUriResolver { EnableCaseInsensitive = true}
     };

ソース: https://github.com/OData/WebApi/issues/812

1
pauldendulk

Odataサービスはクエリを実行しているだけなので、これはデータベース照合設定に依存していると思います。 Vitekの答えが正しい場合、odataは結果セットに対していくつかのクエリ後のフィルタリングを行っていますが、それはおかしいはずですよね?

0
Rolfvm

データベースに依存しません。大文字と小文字を区別しない方法でデータベースに対してクエリを実行した場合でも、ODataは独自に追加のフィルタリングを行い、データをフィルターで除外します。

0
Mariusz Gorzoch