1

我有一个 ASP.NET Web API 控制器,它公开了一个IQueryable(Of String)- 这是一个描述列表。这些字段可能有数万个,因此我使用$top并且$skip只获取其中的一部分——效果很好。

现在我正在尝试通过 ODatasubstringof('mydesc',Property)过滤器过滤这些结果。如您所见,我需要传入要过滤的属性名称。但是,由于我要返回一个字符串列表,因此我实际上没有任何要过滤的属性。

这会导致服务器返回错误,例如 No property or field 'tostring' exists in type 'String'- 当使用$filter=substringof('asd',tostring).

如果我将调用更改为 $filter=substringof('asd',''),则不会引发任何错误,但也不会产生任何结果。

我的问题是,我可以以某种方式格式化$filter运算符以在我的字符串列表中查找子字符串,而无需查找属性/字段,还是我必须声明一个具有单个属性的类,只是为了启用过滤?

4

3 回答 3

3

自从我上次回答这个问题以来,情况发生了变化。OData V3 支持使用“$it”查询基元集合。Asp.net Web API 也支持这种语法。例如,在您的控制器中,您可以返回IQueryable<string>并发送如下请求

$filter=substring('mydesc', $it) 或

$filter=length($it) ge 5

等。您还可以公开其他原语的集合,如 IQueryable 等。

于 2013-01-25T01:43:47.520 回答
0

不幸的是,声明一个具有单个属性的类似乎是我能想到的唯一解决方案。OData $filter不支持类似this参数的东西C#

于 2012-09-24T21:05:54.383 回答
0

另一种不太明显的方法是公开表示列表的计算连接值,然后可以使用 substringof 将列表作为单个属性值查询

于 2013-01-17T08:36:34.637 回答