Условия запроса 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')

Нет ли более сжатого способа выражения нечувствительности к регистру?

Ответы

Ответ 1

Предполагается, что оператор "eq" чувствителен к регистру. В настоящее время рекомендуется использовать tolower (или toupper).

Ответ 2

Я ожидаю, что это зависит от настройки сортировки базы данных, поскольку служба odata просто выполняет запрос. Если ответ Vitek верен, то odata выполняет некоторую фильтрацию пост-запросов в результирующем наборе, и это должно быть странно, правильно?

Ответ 3

Теперь можно выполнять сравнение без учета регистра, установив EnableCaseInsensitive = true в ODataUriResolver. Я использовал это с Microsoft.AspNetCore.OData 7.1.0.

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

Источник: https://github.com/OData/WebApi/issues/812

Ответ 4

Это не зависит от базы данных. Даже если вы выполняете запрос к базе данных в случае чувствительного метода, OData будет выполнять свою собственную дополнительную фильтрацию и фильтровать ваши данные.