用LINQ,我怎么得到M到M+N行

本文关键字:M+N LINQ | 更新日期: 2023-09-27 18:16:14

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

private static const int _scoresPerPage = 20;

,我正在构造一个方法

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

检索信息。现在,我知道如何从0ScoresController._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;
    }

但显然这是荒谬的。我到底应该在这里做什么?

用LINQ,我怎么得到M到M+N行

你想把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表示第一页。