0

我有一个 WCF 数据服务 (OData V3),它的页面限制为 100 个项目(对于所有实体)。

通常,如果我需要超出该限制,没有问题,因为我可以使用内置分页来获取下一页结果。

但是,我看不到“子结果”中内置的任何分页。我非常需要那个!

让我用一个订单列表的示例数据结构来说明:

List<Order> Orders
    |
  Order #1:---
    |        |
    |        |-- Customer
    |        |-- List<Item> ItemsOrdered
    |                | -- Wigdet Type 1
    |                | -- Wigdet Type 2
    |                | -- Wigdet Type 3
    |                | -- Wigdet Type 4
    |                | -- Wigdet Type 5
    |                | -- Wigdet Type 6
    |                | -- Wigdet Type 7
    | 
  Order #2:-
             |
             |-- Customer
             |-- List<Item> ItemsOrdered
                     | -- Wigdet Type 8
                     | -- Wigdet Type 4
                     | -- Wigdet Type 2

如果我的页面限制设置为 5,那么我无法查询 ItemsOrdered 列表的其余部分。

有没有办法对 OData 中的“子列表”进行延续?

4

1 回答 1

1

在协议级别,内部提要(或集合)将包含下一个链接,就像顶级链接一样。因此,您需要做的就是向该下一个链接发出 GET(它将继续枚举该扩展实体的实体,正确的内容被编码在下一个链接中)。

如果您使用的是 WCF DS 客户端库,则需要确保扩展属性的类型是 DataServiceCollection。因此,在您的情况下,ItemsOrdered 属性的客户端类型应该是 DataServiceCollection (请注意,这仅在客户端上是必需的,与数据在服务器上的建模方式无关)。

一旦你知道 DataServiceCollection 有一个 Continuation 属性,它就是下一个链接的表示。要发出加载更多的请求,最方便的方法是调用 context.LoadProperty(orderInstance, "ItemsOrdered", orderInstance.ItemsOrdered.Continuation);

于 2013-02-07T10:18:50.463 回答