数据服务工具包例外当前不支持跳过

时间:2014-11-21 01:07:24

标签: asp.net linq webforms

我正在尝试查询oDataService。如果我尝试跳过,我会得到#34;数据服务工具包目前不支持Skip"例外。没有跳过,我的查询就会被执行。

Dim Students = S in Entity.Students
               Select S
               OrderBy S.FirstName
               Skip(PageSize * PageNumber).Take(PageSize)

如果我离开Take,它仍然有效。我怎样才能解决这个问题?是否有不同的方式在linq中进行分页?

1 个答案:

答案 0 :(得分:0)

为了清楚起见,让我在这里提供答案,并确保代码更清晰。

不支持您尝试使用的扩展方法的LINQ提供程序抛出该错误。在这种情况下,这意味着数据服务工具包不支持Skip方法。您唯一的解决方案是通过所需的项目数来获取所有项目,然后跳过您不需要的项目。这需要您强制LINQ执行查询并首先将所有数据作为列表返回给您。

Dim BatchStudents = S in Entity.Students
                    Select S
                    OrderBy S.FirstName
                    Take(PageSize * PageNumber + PageSize).ToList()

Dim Students = BatchStudents.Skip(PageSize * PageNumber).ToList()

将这些分解为单独的语句(和变量)将有助于追踪任何进一步的投射问题。

警告:按原样执行此操作将从数据源检索PageSize * PageNumber + PageSize项目,因此随着页码数量的增加,需要大量下载该远程数据。这只是因为提供者不支持跳过。第一个ToList()强制LINQ执行查询并获得结果。第二个变量赋值是跳过内存中的项目(项目已经下载)。