微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于扩展集合对象的 OData 客户端 v3 到 v4 更新方法

如何解决用于扩展集合对象的 OData 客户端 v3 到 v4 更新方法

我们使用一些第三方提供的后端,后端已从 OData v3 更新到 v4。这意味着我们也必须更新我们的软件。

现在我面临的问题是,v4 中集合的工作方式与 v3 中的不同。例如,我用于 GET ~/OData/OrdersOrderItems代码以及在 OrderItems 集合中展开对象 Product 是:

SomeDataServiceContext.Orders.Expand("OrderItems").Expand("OrderItems/Product").Take(10)

现在使用 OData v4 我可以扩展 OrderItems,但扩展 OrderItems 集合中的 Product 对象不再起作用。这是我现在使用的代码

SomeDataServiceContext.Orders.Expand(Function(x) x.OrderItems).Take(10)

但是正如您所看到的,这确实检索了 OrderItems 的集合,但没有扩展 OrderItems 集合中的 Product 对象。然而,OrderItems 集合确实包含属性 ProductId

那么在这种情况下,正确的方法是什么:

  1. 查找 v4 中是否有新的方法获取嵌套扩展
  2. 查询端点SomeDataServiceContext.Products获取对应的产品
  3. 建议?

我对 OData 的了解是初级到中级,所以要温和;-)

解决方法

只有当链接是单链时,客户端才有 lambda 语法支持嵌套扩展,因为 Order.OrderItems 是一个 集合,您可以使用 expand 方法的字符串变体:>

SomeDataServiceContext.Orders.Expand("OrderItems($expand=Product)").Take(10)

您会注意到,扩展语法是 OData v3 和 v4 之间 URL 解析的重大变化之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。