ASP MVC Paging with LINQ?

本文关键字:LINQ with Paging MVC ASP | 更新日期: 2023-09-27 18:01:46

我有100条记录。我想要LINQ for this:

int pageNumber = get from user; // for example 2 , 3 ,...
if pageNumber == 2
   return records 20 to 29

谢谢!

ASP MVC Paging with LINQ?

您可能需要的是:

var itemsToShow = items.OrderBy(p => p.Id)
                       .Skip((currentPage - 1) * numPerPage)
                       .Take(numPerPage);

根据Id属性对页面进行排序,并且变量currentPage保存当前页面的数量,numPerPage保存每页的项目数量。

您可能希望创建一个包含分页信息的类型,以使您的工作更轻松。就像

public class PagingInfo
{
     public int ItemsPerPage { get; set; }
     public int NumItems { get; set; }
     public int CurrentPage { get; set; }
     public int TotalPages
     {
         get
         {
             return Math.Ceiling((double)NumItems/ItemsPerPage);
         }
     }
}

currentPagepagingInfo.CurrentPage, numPerPagepagingInfo.ItemsPerPage。此外,您还有一个属性来获取总页数,这可能很有用。这是一种很好的方法,因此您可以在视图模型上传输有关分页的信息。

int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);

我建议使用PagedList。MVC是Nuget上的一个免费库:下面是一个例子:这将是你的动作:

 public ActionResult Index(int page = 1)
    {
        //_db is my sample data context but paged list works for any IEnumerable
        //since this is an extension method
        var model = 
            _db.Comments
            .OrderByDescending(c => c.Date)
            .ToPagedList(page, 10);
        return View(model);
    }

我已经设置模型为一个IPagedList,这是视图:它会自动生成页面链接。

<div class="pager">
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page }),    PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>

是可定制的(通过css)。这是nuget页面:PagedList。MVC核心页