C# odataV4筛选器包含区分大小写和大小写的

C# odataV4筛选器包含区分大小写和大小写的,c#,.net,odata,C#,.net,Odata,我已尝试在oData中过滤区分大小写的内容。但它不起作用。请查找查询字符串 http://services.odata.org/V4/Northwind/Northwind.svc/Employees/?$filter=contains(toupper(FirstName),%27C%27) http://services.odata.org/V4/Northwind/Northwind.svc/Employees/?$filter=contains(tolower(FirstName),%2

我已尝试在oData中过滤区分大小写的内容。但它不起作用。请查找查询字符串

http://services.odata.org/V4/Northwind/Northwind.svc/Employees/?$filter=contains(toupper(FirstName),%27C%27)

http://services.odata.org/V4/Northwind/Northwind.svc/Employees/?$filter=contains(tolower(FirstName),%27C%27)

它返回小写和大写。如果基础数据库引擎使用不区分大小写的排序规则,则在执行比较时,默认情况下,针对该引擎的所有查询都将忽略大小写,即使我们尝试使用函数来处理字段或参数值的大小写

因此,即使OData解析器正确地将您的请求转换为以下语句:

SELECT * FROM Employees WHERE LOWER(FirstName) LIKE '%C%'
SELECT * FROM Employees WHERE UPPER(FirstName) LIKE '%C%'
在CI排序规则中,两条语句都将返回同时包含“C”或“C”的记录。 OOTB不支持从OData查询转换为比较字段的区分大小写的排序规则

Net中的OData查询引擎通常作为基于约定的URL查询到Linq到实体表达式之间的转换器运行,如果您使用EF作为SQL server的ORM,那么这些实体查询将解析为SQL语句



我看到过一些类似的帖子,建议您可以在
ODataUriResolver
上设置
enablecasensitive=false
,但这只会影响控制器、实体和属性名称的解析,它不会影响字符串值比较的计算。

如果基础数据库引擎使用不区分大小写的排序规则,则默认情况下,在执行比较时,针对该引擎的所有查询都将忽略大小写,即使我们尝试使用函数操纵字段或参数值的大小写

因此,即使OData解析器正确地将您的请求转换为以下语句:

SELECT * FROM Employees WHERE LOWER(FirstName) LIKE '%C%'
SELECT * FROM Employees WHERE UPPER(FirstName) LIKE '%C%'
在CI排序规则中,两条语句都将返回同时包含“C”或“C”的记录。 OOTB不支持从OData查询转换为比较字段的区分大小写的排序规则

Net中的OData查询引擎通常作为基于约定的URL查询到Linq到实体表达式之间的转换器运行,如果您使用EF作为SQL server的ORM,那么这些实体查询将解析为SQL语句



我看到过一些类似的帖子,建议您可以在
ODataureResolver
上设置
enableCasensitive=false
,但是这只会影响控制器、实体和属性名称的解析,不会影响字符串值比较的评估。

说这是可能的,但我无法使区分大小写的服务器端筛选器正常工作。请在以下位置提交问题:表示这是可能的,但我无法使区分大小写的服务器端筛选器正常工作。请在以下位置提交问题: