【问题标题】:OData $filter substringof applied to a list of stringsOData $filter substringof 应用于字符串列表
【发布时间】:2012-04-25 15:29:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    $filter=length($it) ge 5

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-19
          • 1970-01-01
          • 1970-01-01
          • 2014-12-03
          • 2019-02-19
          • 2011-06-19
          • 2019-03-23
          • 2018-02-17
          相关资源
          最近更新 更多