【问题标题】:Paging with WCF data service使用 WCF 数据服务进行分页
【发布时间】:2012-01-20 04:09:34
【问题描述】:

我的问题是关于如何使用 WCF 数据服务处理分页。我想使用它的方式是执行查询(传递页面大小和当前页面),并返回该查询的结果以及页面总数、当前页码和页面大小等分页信息。客户端(这是另一个将结果转换为 JSON 以供使用它的移动应用程序的服务)使用此分页信息来处理下一个/上一个按钮。

但是,在 WCF 数据服务上使用 LINQ 太有限了,它不支持我需要的 LINQ 表达式。

我尝试在 WCF data 服务中创建服务操作,但我只能返回 IQueryable 数据实体集合,因此无法返回还包含分页信息的自定义实体。

有没有办法为 WCF 数据服务实现分页,以便在结果旁边我也能得到分页信息?

编辑:由于 WCF 数据服务的限制,我切换到了普通的 WCF 服务。老实说,我不明白为什么有人会想要使用具有这些严重限制的数据服务!

【问题讨论】:

  • 抱歉,我错过了您问题的 data 部分。 WCF Data 服务非常有限。这是一项 RESTful 服务,因此您只需在 URL 中传递页面和页面大小信息。如果您使用它以便可以针对它编写 LINQ 查询 - 祝您好运。 WCF 数据服务是 OData 的一种实现,它限制了查询的格式。你最好编写一个 WCF 服务,在其中你实际上可以控制方法调用。
  • 我担心这会是答案:-/ 好的,谢谢...

标签: c# wcf linq pagination wcf-data-services


【解决方案1】:

查看 WCF 数据服务 herehere 的分页提供程序

【讨论】:

  • 我认为这对我没有帮助。它只有下一页机制,但客户端不知道总页数......
  • 是的。不确定,但我认为您唯一的选择是拥有一个包含数据和分页详细信息(页数、当前页面、大小等)的定制 DataModel。虽然要实现这一点,您可能需要创建一个自定义类型数据服务提供者(参见第一篇文章)。
【解决方案2】:

不幸的是,WCF 数据服务似乎太有限了,我的解决方案是切换到常规 WCF 服务,以便我可以使用完整的 LINQ 并自己定义数据协定。

【讨论】:

    【解决方案3】:

    使用SkipTake对来自WCF数据服务的数据进行客户端分页,例如:

    var items = (from i in ctx.MyEntities
                 select i).Skip(StartIndex).Take(PageSize)
    

    其中 StartIndex 是您要返回的数据的开始位置,PageSize 是要返回的最大元素数。

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多