使用LINQ,如何通过M + N获取行M?

时间:2015-10-06 04:23:56

标签: c# sql asp.net asp.net-mvc linq

我为我的视图创建了一个分页系统,根据列的值显示前20个项目(如果少于20个,则更少),然后查看者可以点击" Page 2"看项目21到40(如果总共少于40项则更少),然后""看项目41-60等。我的控制器有一个成员

private static const int _scoresPerPage = 20;

我正构建一个方法

    public string getPageNRows ( int N )
    {
         string scoresRowsHtml = String.Empty; 
         // ... 
         return scoresRowsHtml;  
    }

用于检索信息。现在,我知道如何通过0获取ScoresController._scoresPerPage * N,以便我可以在技术上做类似的事情

    public string getPageNRows ( int N )
    {
        string scoresRowsHtml = String.Empty;
        IQueryable<Score> table1 = ( from s in this._SD.Scores
                                            orderby s.score1 descending
                                            select s
                                           ).Take(ScoresController._scoresPerPage * N);
        IQueryable<Score> table2 = ( from s in table1 
                                     orderby s.score1 ascending
                                     select s).Take(ScoresController._scoresPerPage);
        table2.Reverse(); 
        // ... 
        return scoresRowsHtml;
    }

但显然这很荒谬。我真的应该在这做什么?

1 个答案:

答案 0 :(得分:2)

您希望将Skip()与Take()

合并
IQueryable<Score> table1 = ( from s in this._SD.Scores
                             orderby s.score1 descending
                             select s
                             ).Skip(ScoresController._scoresPerPage * (N-1))
                             ).Take(ScoresController._scoresPerPage);

假设N == 1表示第一页。