Ответ 1
Предполагается, что оператор "eq" чувствителен к регистру. В настоящее время рекомендуется использовать tolower (или toupper).
Указывает ли OData, следует ли оценивать условия фильтра в строковых полях чувствительно или нечувствительно к регистру?
Пример: (из документов)
/Suppliers?$filter=Address/City eq 'Redmond'
Ожидается ли, что это будет чувствительно к регистру или нет?
Если я хочу предложить оба варианта, как это можно выразить? Существует функция tolower(), которая может использоваться как:
/Suppliers?$filter=tolower(Address/City) eq 'redmond'
или
/Suppliers?$filter=tolower(Address/City) eq tolower('Redmond')
Нет ли более сжатого способа выражения нечувствительности к регистру?
Предполагается, что оператор "eq" чувствителен к регистру. В настоящее время рекомендуется использовать tolower (или toupper).
Я ожидаю, что это зависит от настройки сортировки базы данных, поскольку служба odata просто выполняет запрос. Если ответ Vitek верен, то odata выполняет некоторую фильтрацию пост-запросов в результирующем наборе, и это должно быть странно, правильно?
Теперь можно выполнять сравнение без учета регистра, установив EnableCaseInsensitive = true в ODataUriResolver. Я использовал это с Microsoft.AspNetCore.OData 7.1.0.
var oDataUriParser = new ODataUriParser(model, uri)
{
Resolver = new ODataUriResolver { EnableCaseInsensitive = true}
};
Это не зависит от базы данных. Даже если вы выполняете запрос к базе данных в случае чувствительного метода, OData будет выполнять свою собственную дополнительную фильтрацию и фильтровать ваши данные.