使用LINQ进行ASP MVC分页?

时间:2014-05-04 03:38:46

标签: 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

谢谢!

3 个答案:

答案 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