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
谢谢!
您可能需要的是:
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);
}
}
}
则currentPage
为pagingInfo.CurrentPage
, numPerPage
为pagingInfo.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核心页