我有100条记录。我想要LINQ:
int pageNumber = get from user; // for example 2 , 3 ,...
if pageNumber == 2
return records 20 to 29
谢谢!
答案 0 :(得分:2)
您想要的是以下内容:
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
。此外,您还拥有一个属性来获取可能有用的总页数。这是一种很好的方法,因此您可以在视图模型上传输有关分页的信息。
答案 1 :(得分:1)
int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);
答案 2 :(得分:1)
我建议使用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 nuget page