4

该文档仅显示了如何绑定到 IEnumerable(它使用 linq 进行分页和排序)......但我需要反对 sproc,因为表达我正在使用 linq 处理的查询被证明有点慢。

任何人都可以提供有关执行此操作的最佳方法的任何指导或指示吗?

4

3 回答 3

6

您需要使用自定义绑定。链接的示例显示了如何获取当前页面。

于 2010-08-05T11:16:42.773 回答
3

您是在谈论如何将 Telerik 网格绑定到存储过程发出的结果集,或者如何在存储过程中实现分页?从你的问题看不清楚。

下面的 T-SQL 存储过程是一种非常有效的分页实现。SQL 优化器可以非常快速地找到第一个 ID。将此与 ROWCOUNT 的使用结合起来,您就有了一种既能提高 CPU 效率又能提高读取效率的方法。对于具有大量行的表,它肯定优于我见过的使用临时表或表变量的任何方法。

CREATE  PROCEDURE dbo.PagingTest
(
    @PageNumber int,
    @PageSize int
)
AS

DECLARE @FirstId int, @FirstRow int

SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow

-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.

SELECT   @FirstId = [Id]
FROM     dbo.TestTable
ORDER BY [Id]

SET ROWCOUNT @PageSize

SELECT   *
FROM     dbo.TestTable
WHERE    [Id] >= @FirstId
ORDER BY [Id]

SET ROWCOUNT 0
GO 
于 2010-08-04T12:43:02.687 回答
0

RoadWarrior 为您提供了一个很好的分页存储过程示例,并且 korchev 为您指出了自定义绑定。

实际上,只要您以 IEnumerable 的形式获取数据,数据的来源就无关紧要,因此只需编写数据访问代码,并在自定义绑定之后将数据放入 List 中应该很容易。

于 2010-11-22T15:34:06.743 回答