MVC核心比较PagedList与OrderBy跳过

时间:2018-07-08 19:01:47

标签: c# asp.net-mvc linq asp.net-core pagination

有两种方法可以在MVC Core中为列表创建页面。例如,我有20个项目的清单,并且想要每页显示5个项目,例如购物网站。

使用一种方法与另一种方法相比有什么好处/比较,是否有一般的行业惯例?我想了解许多不同的工作方式,想看看是否有最佳方法

1)有一种OrderBy-Skip-Take方法

public ViewResult List(int productpage = 1)
 => View(repository.Products
 .OrderBy(p => p.ProductID)
 .Skip((productpage - 1) * pagesize)
 .Take(pagesize));

2)还有使用PagedList

的Nuget
return View(_context.Product.ToPagedList(productpage, pagesize));

1 个答案:

答案 0 :(得分:0)

PagedList也在内部使用SkipTake。如果您查看PagedList中的github源,则会在PagedListExtensions类中找到类似的内容:

if (superset.Count() < pageSize)
    yield return superset;
else
{
    var numberOfPages = Math.Ceiling(superset.Count() / (double)pageSize);
    for (var i = 0; i < numberOfPages; i++)
        yield return superset.Skip(pageSize * i).Take(pageSize);                
}

参考:https://github.com/troygoode/PagedList/blob/master/src/PagedList/PagedListExtensions.cs 并且:http://www.extensionmethod.net/1882/csharp/queryover/topagedlist