过滤时RiaServices和entityQuery.IncludeTotalCount的智能分页问题

时间:2010-09-29 20:58:25

标签: silverlight-4.0 pagination wcf-ria-services

我正在使用RiaServices使用EntityQuery填充网格。

由于我的数据库有数百万行,我想只查询当前页面,还要为查询目的提供总行数。

Ex:总共100行

entityQuery.Skip(0).Take(10); //for the first page
entityQuery.IncludeTotalCount = true;

这给我带来了10行,而loadOperation.TotalEntityCount = 100.完美。

但想象一下:

Ex:总共100行

entityQuery.Where(p => Id >= 1 && p.Id <= 50).Skip(0).Take(10); //with filter now
entityQuery.IncludeTotalCount = true;

这给我带来了10行,而loadOperation.TotalEntityCount = 100(我需要50行!)

以下是问题:出于分页目的,我需要满足我的过滤器的实体总数,而不是所有实体。

是否可以更改“IncludeTotalCount”的查询,还是应该忘记TotalEntityCount并查询服务器两次?

干杯,

AndréCarlucci

1 个答案:

答案 0 :(得分:1)

RIA Services通过剥离skip / take分页指令(正如您所期望的那样)处理总计数请求,并将未分页的查询传递给受保护的虚拟DomainService.Count方法。我建议覆盖此方法,设置断点,以便验证是否将正确的计数查询传递给您的服务。如果您正在使用EF DomainService,Count的基本实现将只执行query.Count()。所以事情应该像你期望的那样 - 我不确定他们为什么不这样做。你使用什么类型的DomainService?