问题描述
我们使用一些第三方提供的后端,后端已从 OData v3 更新到 v4。这意味着我们也必须更新我们的软件。
现在我面临的问题是,v4 中集合的工作方式与 v3 中的不同。例如,我用于 GET ~/OData/Orders
和 OrderItems
的代码以及在 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
我对 OData 的了解是初级到中级,所以要温和;-)
解决方法
只有当链接是单链时,客户端才有 lambda 语法支持嵌套扩展,因为 Order.OrderItems
是一个 集合,您可以使用 expand 方法的字符串变体:>
SomeDataServiceContext.Orders.Expand("OrderItems($expand=Product)").Take(10)
您会注意到,扩展语法是 OData v3 和 v4 之间 URL 解析的重大变化之一。