【问题标题】:OData V4 - Expand and options (filter, top, ...)OData V4 - 展开和选项(过滤器、顶部、...)
【发布时间】:2020-12-02 21:09:01
【问题描述】:

我正在使用带有 ASP WebApi 的 OData V4。我会像新版本的 OData 一样过滤扩展的集合(http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html - 示例 90),但在我的情况下,过滤器选项无效。

我也尝试对 Nortwhind 服务和 TripPin 服务做同样的事情。它适用于 TriPin 服务,但不适用于 Northwind 服务。

这里,我使用的请求:

我的服务 : api/odata/Customers(19037)?$expand=orders($filter=id+eq+1796) --> 没有'不工作

Northwind 服务http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$expand=Orders($filter=OrderID+eq+10643) --> 不起作用强>

TripPin 服务http://services.odata.org/V4/TripPinServiceRW/People?$expand=Trips($filter=TripId+eq+1001) --> 有效

感谢您的帮助。

【问题讨论】:

  • 只是为了清楚。 Northwind Service 使用 WCF 数据服务实现,TripPin 直接使用 ODL 实现。
  • 在某些情况下,使用运算符 $expand 来规避聚合方面的 OData 限制。对于这种需求,您可以使用我的产品 AdaptiveLINQ,它允许通过标准 OData 运算符公开聚合查询,如 $select$filter

标签: asp.net-web-api odata wcf-data-services


【解决方案1】:

这是我们目前不支持的功能。

根本原因是在翻译 $expand 时忽略了内联 $filter。

SelectExpandBinder.cs 的检查方法“GetPropertiesToExpandInQuery”:

https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.OData/OData/Query/Expressions/SelectExpandBinder.cs

只返回expandItem.SelectAndExpand,而忽略其他选项。

所以现在只有 $expand 中的 $select 和 $expand 可以工作。

我之前研究过如何解决它,但由于该问题未获批准, 请为金福开启的问题投票,以引起领导团队的更多关注。

【讨论】:

【解决方案2】:

我重现了这个问题,发现 $expand 中的 $select 效果很好。我认为这是一个缺陷并为此打开了一个错误:https://aspnetwebstack.codeplex.com/workitem/2070

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    相关资源
    最近更新 更多