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

时间:2021-02-10 11:02:58

标签: c# vb.net odata odata-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 的了解是初级到中级,所以要温和;-)

1 个答案:

答案 0 :(得分:1)

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

SomeDataServiceContext.Orders.Expand("OrderItems($expand=Product)").Take(10)
<块引用>

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