Odata - 嵌套的 $select 和 $expand

22

http://services.odata.org/V4/Northwind/Northwind.svc/

我尝试一次性获取所有Customers,他们的Orders和相应的Order_Details,并使用嵌套的$expand。为了查询数据,我使用以下链接:http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details)

现在我想要使用$select限制数据。问题是我找不到正确的语法来对中间表Orders使用$select。我只能将其应用于顶部表格Customers和底部表格Order_Details,如下所示:

http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$select=CustomerID&$expand=Orders($expand=Order_Details($select=UnitPrice))

是否可能也为其中的表格(在我的情况下为Orders)使用$select?


你真的需要将这些数据作为嵌套对象获取吗?从经验来看,在大多数情况下,我们需要一个对象树的聚合视图。我开发了LINQ扩展方法QueryByCube,以构建这种类型的服务查询,可使用OData协议进行查询。在此处阅读更多信息:AdaptiveLINQ - nlips
@nlips 我们还受限于.NET 2.0,无法使用LINQ。你能否给我一个聚合视图的例子?基本上,我想尽可能少地进行网络请求来获取所有这些数据。 - VladL
我假设使用Northwind.svc只是一个例子。我猜你会开发自己的OData服务并使用LINQ服务器端。聚合视图的想法是呈现一个实体集,其中每个字段都由本机实体模型中的表达式构建。一些字段被表示为多个项的聚合。例如,我们可以通过简单地发出请求来获得“按日期分类的每位客户的总销售额”:MyService.svc?$select=CustomerID,OrderDate,TotalSales - nlips
@nlips 我正在编写一个数据提供程序,它将使用现有的 OData 服务,所以我必须实现“最坏情况” :) - VladL
1个回答

26

7
圣牛油果一个分号……浪费了好几个小时。能否分享一些源文件? - Jerther
1
@Jerther,正如你所看到的,我已经回答了自己的问题。我也浪费了数小时的时间,最终偶然找到了解决方案。不确定现在是否仍然如此,但在撰写本文时,我无法在官方文档中找到这个答案。 - VladL
4
有提到它,但没有例子。在整个文件中,分号只出现了一次:http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html - Jerther

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接