OData查询$筛选条件和区分大小写

OData查询$筛选条件和区分大小写,odata,case-sensitive,Odata,Case Sensitive,OData是否指定字符串字段上的筛选条件是区分大小写还是不区分大小写 示例:(来自文档) 这是否需要区分大小写 如果我想提供这两种选择,如何表达?有一个tolower()函数可以像这样使用: /Suppliers?$filter=tolower(Address/City) eq 'redmond' 或 有没有一种更简洁的方法来表示不区分大小写的匹配?认为“eq”运算符是区分大小写的。使用tolower(或toupper)是目前推荐的方法。我希望这取决于您的数据库排序规则设置,因为odata服务

OData是否指定字符串字段上的筛选条件是区分大小写还是不区分大小写

示例:(来自文档)

这是否需要区分大小写

如果我想提供这两种选择,如何表达?有一个tolower()函数可以像这样使用:

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


有没有一种更简洁的方法来表示不区分大小写的匹配?

认为“eq”运算符是区分大小写的。使用tolower(或toupper)是目前推荐的方法。

我希望这取决于您的数据库排序规则设置,因为odata服务只是执行查询。
如果Vitek的回答是正确的,那么odata正在对结果集进行一些查询后过滤,这应该很奇怪,对吧?

它不依赖于数据库。即使您以区分大小写的方式对数据库执行查询,OData也会自己进行额外的过滤,并过滤掉您的数据

现在可以通过在ODataureResolver上设置enableCaseSensitive=true来进行不区分大小写的比较。我将其用于Microsoft.AspNetCore.OData 7.1.0

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

来源:

我使用
EMailAddress1
Contact
实体的
tolower
字段得到以下错误:
无效的“where”条件。实体成员正在调用无效的属性或方法。
有什么想法吗?如何请?、需要示例。@Mike-这里有一个示例:/people?$filter=tolower(Name)eq-tolower('JAmes')-这应该给你所有名为'JAmes'的人(或人对象)(不区分大小写,可以是'JAmes'、'JAmes'、'JAmes'等。希望这能有所帮助:)这是否适用于其他操作员等,
stringof
?在与IQueryable和entity框架相结合的请求中使用tolower时要小心。LOWER在查询大量数据时会导致性能不佳。我在
EMailAddress1
字段的
Contact
实体上使用
tolower
时出现以下错误:
无效的“where”条件。实体成员正在调用无效的属性或方法。
有什么想法吗?在何处/如何使用此oDataUriParser?oDataUriParser.ParseFilter()。表达式返回作为表达式树根的SingleValueNode。它使url不区分大小写,而不是筛选器。
/Suppliers?$filter=tolower(Address/City) eq tolower('Redmond')
     var oDataUriParser = new ODataUriParser(model, uri)
     {
        Resolver = new ODataUriResolver { EnableCaseInsensitive = true}
     };