2015-10-06 70 views
1

我爲我的視圖創建了一個分頁系統,根據視圖中顯示的列值顯示排序的前20項(如果總數少於20項,則更少),然後查看者可以單擊「第2頁」查看項目21至40(或更少,如果有小於40個),然後在「第3頁」看到項41-60,等等。我控制器具有構件使用LINQ,我如何獲得行M到M + N?

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; 
    } 

,但顯然這是荒謬的。我應該在這裏做什麼?

回答

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指的第一頁。

相關問題