使用OData按长度过滤字段

时间:2017-08-07 08:11:28

标签: odata

我在奇怪的情况下,我将一些数字存储为数据库中的文本。我不是很熟悉OData,我试图编写一个将这些字符串作为实际数字处理的查询。

$filter=(((length(Document/DocumentSet/ReferenceNumbers) ge 3) and (Document/DocumentSet/ReferenceNumbers gt '100')))

是我能想到的最好的,但这给了我一个ODataException

The argument for an invocation of a function with name 'length' is not a single value. All arguments for this function must be single values.

或者如果我尝试使用(我还在试图找出哪一个是正确的,我真的不知道OData):

$filter=(((length(Document/DocumentSet/ReferenceNumbers/Number) ge 3) and (Document/DocumentSet/ReferenceNumbers/Number gt '100')))

然后

The parent value for a property access of a property 'Number' is not a single value. Property access can only be applied to a single value.

问题是:有没有办法按长度过滤OData?

1 个答案:

答案 0 :(得分:1)

根据您发布的内容,我了解ReferenceNumbers属性是一个数组,因为错误告诉不是单个值

对于数组的过滤,您需要使用lambda运算符(5.1.1.10 in the official OData documentation):

  • any - 至少有一个条目必须符合条件
  • all - 当所有数组条目必须匹配时

然后lengthgt应该适合您。示例请求 - 所有ReferenceNumbers都应大于100:

root/set?$filter=Document/DocumentSet/ReferenceNumbers/any(refNum:refNum gt '100')