OData是否指定是对字符串字段的过滤条件进行区分大小写还是不区分大小写?
示例:(来自文档)
/Suppliers?$filter=Address/City eq 'Redmond'
预计这是否区分大小写?
如果我想提供两种选择,如何表达?有一个tolower()函数可以像:
一样使用/Suppliers?$filter=tolower(Address/City) eq 'redmond'
或
/Suppliers?$filter=tolower(Address/City) eq tolower('Redmond')
是否有更简洁的方式来表达不区分大小写的匹配?
答案 0 :(得分:16)
“eq”运算符应该区分大小写。使用tolower(或toupper)是目前推荐的方法。
答案 1 :(得分:1)
现在可以通过在ODataUriResolver上设置EnableCaseInsensitive = true来进行不区分大小写的比较。我将此用于Microsoft.AspNetCore.OData 7.1.0。
var oDataUriParser = new ODataUriParser(model, uri)
{
Resolver = new ODataUriResolver { EnableCaseInsensitive = true}
};
答案 2 :(得分:0)
我希望这取决于您的数据库排序规则设置,因为odata服务只是执行查询。 如果Vitek的答案是正确的,那么odata正在对结果集进行一些后置查询过滤,这应该很奇怪,对吗?
答案 3 :(得分:0)
它不依赖于数据库。即使您以敏感的方式对数据库执行查询,OData也会进行自己的额外过滤并过滤您的数据。