代码之家  ›  专栏  ›  技术社区  ›  Joel Martinez

使用存储过程时使用Telerik MVC网格进行分页

  •  4
  • Joel Martinez  · 技术社区  · 14 年前

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

    有没有人能提供一些关于什么是最好的方法的指导或建议?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Atanas Korchev    14 年前

    你需要使用 custom binding

        2
  •  3
  •   HTTP 410    14 年前

    下面的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 
    
        3
  •  0
  •   ozz    14 年前

    RoadWarrior为您提供了一个分页过程的好例子,korchev为您指出了定制绑定。

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