【问题标题】:OData query $filter conditions and case-sensitivityOData 查询 $filter 条件和区分大小写
【发布时间】:2012-11-21 14:55:07
【问题描述】:

OData 是否指定字符串字段的过滤条件是区分大小写还是不区分大小写?

示例:(来自文档)

/Suppliers?$filter=Address/City eq 'Redmond' 

这是否应该区分大小写?

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

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

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

难道没有更简洁的方式来表达不区分大小写的匹配吗?

【问题讨论】:

  • 我在EMailAddress1 字段的Contact 实体上使用tolower 得到以下错误:Invalid 'where' condition. An entity member is invoking an invalid property or method. 有什么想法吗?

标签: odata case-sensitive


【解决方案1】:

“eq”运算符应该区分大小写。目前推荐使用 tolower(或 toupper)。

【讨论】:

  • 我在EMailAddress1 字段的Contact 实体上使用tolower 得到以下错误:Invalid 'where' condition. An entity member is invoking an invalid property or method. 有什么想法吗?
  • 怎么样?,需要例子。
  • @Mike - 这是一个例子:/people?$filter=tolower(Name) eq tolower('JAmes') - 这应该给你所有名字是'James'的人(或Person对象) (不区分大小写,可以是 'JAMES'、'james'、'JamES' 等。希望这会有所帮助:)
  • 这是否适用于其他运营商等,stringof
  • 在与 IQueryable 和实体框架结合的请求中使用 tolower 时要小心。查询大量数据时,LOWER 会导致性能不佳。
【解决方案2】:

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

【讨论】:

  • 许多 IQueryable<T> 实现将查询传递给底层 SQL 提供程序都是如此,但规范根本没有提到区分大小写,因此行为将严重依赖于实现,在本案例 OP 没有提供任何实现细节。
【解决方案3】:

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

【讨论】:

  • 这是一种误导,规范根本没有提到区分大小写,大小写和接受敏感性完全取决于实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2014-12-10
  • 2021-07-31
  • 2013-04-25
  • 2017-03-16
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多