2015-10-06 3 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 означает первую страницу.

Смежные вопросы