【发布时间】:2015-07-30 03:49:35
【问题描述】:
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 限制数据。问题是我找不到正确的语法来为中间表使用$select - Orders。我可以将它应用到上表 - Customers 和底部表 - Order_Details,如下所示:
是否可以将 $select 也用于两者之间的表,在我的情况下是 Orders?
【问题讨论】:
-
您真的需要将这些数据作为嵌套对象获取吗?根据经验,我发现在大多数情况下,我们需要对象树的聚合视图。我开发了 LINQ 扩展方法
QueryByCube来构建这种使用 OData 协议可查询的服务。在此处阅读更多信息:AdaptiveLINQ。 -
@nlips 我不能使用 LINQ,我们仍然受限于 .NET 2.0。你能给我一个聚合视图的例子吗?基本上,我试图用尽可能少的网络请求来获取所有这些数据
-
我假设使用 Northwind.svc 是例如。我猜您将开发自己的 OData 服务并使用 LINQ 服务器端。聚合视图的想法是呈现一个实体集,其中每个字段都由原生实体模型中的表达式构建。 某些字段表示为几个项目的聚合。例如,我们可以通过简单地发出请求来获得每个客户按日期的总销售额:
MyService.svc?$select=CustomerID,OrderDate,TotalSales. -
@nlips 我正在编写一个将使用现有 OData 服务的数据提供程序,因此我必须实现“最坏情况”:)
标签: select entity odata expand