【发布时间】:2014-06-20 13:35:37
【问题描述】:
我有 100 条记录。我想要 LINQ:
int pageNumber = get from user; // for example 2 , 3 ,...
if pageNumber == 2
return records 20 to 29
谢谢!
【问题讨论】:
标签: c# asp.net linq asp.net-mvc-4
我有 100 条记录。我想要 LINQ:
int pageNumber = get from user; // for example 2 , 3 ,...
if pageNumber == 2
return records 20 to 29
谢谢!
【问题讨论】:
标签: c# asp.net linq asp.net-mvc-4
您想要的可能是以下内容:
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。此外,您还有一个属性可以获取有用的页面总数。这是一种很好的方法,因此您可以在视图模型上传输有关分页的信息。
【讨论】:
items btw ;)
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 nuget page
【讨论】: