OData $ filter substringof应用于字符串列表

时间:2012-04-13 08:53:53

标签: linq filter odata asp.net-web-api

我有一个公开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运算符以查找字符串列表中的子字符串,而无需查找属性/字段,或者我将不得不声明具有单个属性的类,只是为了启用过滤?

3 个答案:

答案 0 :(得分:3)

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

的请求

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

$ filter = length($ it)ge 5

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

答案 1 :(得分:0)

遗憾的是,声明一个具有单一属性的类似乎是我能想到的唯一解决方案。 OData $filterthis

C#参数之类的内容没有任何支持

答案 2 :(得分:0)

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