我在奇怪的情况下,我将一些数字存储为数据库中的文本。我不是很熟悉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?
答案 0 :(得分:1)
根据您发布的内容,我了解ReferenceNumbers
属性是一个数组,因为错误告诉不是单个值。
对于数组的过滤,您需要使用lambda运算符(5.1.1.10 in the official OData documentation):
any
- 至少有一个条目必须符合条件all
- 当所有数组条目必须匹配时然后length
与gt
应该适合您。示例请求 - 所有ReferenceNumbers
都应大于100:
root/set?$filter=Document/DocumentSet/ReferenceNumbers/any(refNum:refNum gt '100')