我有一个公开IQueryable(Of String)
的ASP.NET Web API控制器 - 这是一个描述列表。这些字段可以是成千上万的数量级,因此我使用$top
和$skip
来获取它的一大块 - 这很好。
现在我尝试通过OData substringof('mydesc',Property)
过滤器过滤这些结果。如您所见,我需要传入要过滤的 Property 名称。但是,由于我正在返回一个字符串列表,我实际上没有任何属性可以过滤。
这会导致服务器返回错误
No property or field 'tostring' exists in type 'String'
- 使用$filter=substringof('asd',tostring)
跟注时。
如果我将呼叫更改为$filter=substringof('asd','')
,则不会引发任何错误,但也没有结果。
我的问题是,我可以以某种方式格式化$filter
运算符以查找字符串列表中的子字符串,而无需查找属性/字段,或者我将不得不声明具有单个属性的类,只是为了启用过滤?
答案 0 :(得分:3)
自从我上次回答这个问题以来,情况发生了变化。 OData V3支持使用'$ it'查询基元的集合。 Asp.net Web API也支持此语法。例如,在您的控制器中,您可以返回IQueryable<string>
并发送类似
$ filter = substring('mydesc',$ it)或
$ filter = length($ it)ge 5
等。您还可以公开其他基元的集合,如IQueryable等。
答案 1 :(得分:0)
遗憾的是,声明一个具有单一属性的类似乎是我能想到的唯一解决方案。 OData $filter
对this
C#
参数之类的内容没有任何支持
答案 2 :(得分:0)
另一个不太明显的方法是公开表示列表的计算连接值,然后substringof可用于查询列表作为单个属性值