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

OData client v3 to v4 update approach for Expand object of collection

我们使用第三方从 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 中是否有获取嵌套 Expands 的新方法
  2. 查询端点SomeDataServiceContext.Products得到对应的产品
  3. 建议?

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

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

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

You will notice here, expansion syntax is one of the breaking changes in URL parsing between OData v3 and v4.