在WCF数据服务v2中结合使用Skip Tokens和服务器端过滤

时间:2014-03-13 20:43:17

标签: wcf-data-services

如何在WCF数据服务(版本2)中结合使用过滤和服务器端分页?

在下面的代码段中,NextLinkUri始终缺少$ filter查询参数。我尝试用NextLinkUri构建一个新的Uri并重新添加$ filter param并执行这个新的Uri。毫不奇怪,这会导致服务器端错误。

var query3 = ServiceContext.ConventionalReturnFacts;
var filterString = String.Format("CalendarDateId ge {0} and CalendarDateId lt {1}",
                    passedCalendarYear * 10000,
                    (passedCalendarYear + calendarYearIncrement) * 10000);
query3.AddQueryOption("$filter", filterString);

// Get first page of results
var response = query3.Execute();
result.Results = response.ToList();

// Get remaining pages (if any)
var continuation = ((QueryOperationResponse)response).GetContinuation();
while (continuation != null)
{
    // NextLinkUri is missing the $filter query parameter so pages 2 and
    // up end up having unfiltered entities!
   response = ServiceContext.Execute<ConventionalReturnFact>(continuation.NextLinkUri);        
   ((List<ConventionalReturnFact>)result.Results).AddRange(response.ToList());
   continuation = ((QueryOperationResponse)response).GetContinuation();
}

1 个答案:

答案 0 :(得分:0)

客户端不应将任何系统查询选项附加到下一个链接的URL。下一个链接对客户端不透明。

在您的情况下,下一个链接应该返回过滤数据的下一页。如果没有,这是服务问题,而不是客户。