我正在尝试查询oDataService。如果我尝试跳过,我会得到#34;数据服务工具包目前不支持Skip"例外。没有跳过,我的查询就会被执行。
Dim Students = S in Entity.Students
Select S
OrderBy S.FirstName
Skip(PageSize * PageNumber).Take(PageSize)
如果我离开Take,它仍然有效。我怎样才能解决这个问题?是否有不同的方式在linq中进行分页?
答案 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执行查询并获得结果。第二个变量赋值是跳过内存中的项目(项目已经下载)。