我有一个 WCF数据服务,其中包含一个名为MostRecentFilms
的自定义操作,可返回源中最近的10个影片。每部电影都有Year
属性。一切都可以使用默认设置,但是当我为实体集config.SetEntitySetPageSize("*", 100)
设置页面大小时,返回的电影的顺序并不好。如果结果集小于100,则无关紧要,它们没有从最新到更少的顺序排序,当页面大小限制不存在时如何返回。
我不知道这是否是WCF数据服务错误,或者我在这里错过了一些配置。任何帮助澄清这一点将不胜感激。
答案 0 :(得分:2)
这实际上是设计的。实现服务器驱动的分页(SetEntitySetPageSize启用它)的方式需要稳定(和众所周知)的结果顺序。 因此,服务将按给定实体的所有关键属性对服务操作的结果进行排序(它也使用实体集进行排序)。 客户端可以在某种程度上影响排序 - 如果请求中有$ orderby,则生成的订单将是$ orderby的应用程序,后跟所有关键属性。 目前,服务器上没有办法规定实体集或服务操作的顺序,这样服务器驱动的分页处理就会像对待来自客户端的$ orderby一样考虑它。 您可以让客户端添加正确的$ orderby,或者如果不可能,我能想到的唯一其他解决方法是在WCF数据服务处理之前将$ orderby注入URL(这可以通过自定义主机完成,特殊标题,WCF,...取决于你如何主持服务等等)。但这有点hacky并要求您半解析URL以便能够识别已存在的任何现有$ orderby。 请注意,此行为不仅适用于服务器驱动的分页,而且$ top和$ skip将重新排序结果以保持稳定的排序。