使用PagedList进行分页,效率如何?

Fla*_*nix 16 c# asp.net-mvc paging

我一直试图实现分页已经有一段时间了,我发现这个教程用于使用MVC进行分页:ASP.NET MVC分页完美地完成了

现在,在这个解决方案中,我在数据库中查询整个客户端集,然后返回一个客户端的分页列表而不是普通列表.

我觉得这很令人不安,因为我只打算每页显示10或20个条目,而我的数据库很容易就会有超过一百个.因此,每次我想显示Index页面时查询整个数据库似乎都是一个糟糕的解决方案.

如果我理解错误的东西,请立即剪掉我,但对我而言,这个解决方案绝不是完美的.

我误解了什么吗?是否有一个更有效的解决方案或库用于MVC的分页?

Jon*_*onE 8

自然地,分页将需要知道总结果计数,以便逻辑确定有多少页面等.但是,不是将所有结果都降低,而是将查询构建到数据库以返回分页量(例如30)和as以及所有结果的计数.

例如,如果您使用的是Entity Framework或LINQ2SQL,则可以执行此类操作

IQueryable<Result> allResults = MyRepository.RetrieveAll();

var resultGroup = allResults.OrderByDescending(r => r.DatePosted)
                                               .Skip(60)
                                               .Take(30)
                                               .GroupBy(p => new {Total = allResults.Count()})
                                               .First();

var results = new ResultObject
{
    ResultCount = resultGroup.Key.Total,
    Results = resultGrouping.Select(r => r)
};
Run Code Online (Sandbox Code Playgroud)

因为我们在结果集上没有完成.ToList(),直到我们完成了我们想要的结果,我们还没有将结果带入内存.当我们在结果集上调用.First()时就完成了.

最后,我们最终得到的Object(ResultObject)可用于稍后进行分页.由于我们有计数,我们已经知道我们在哪个页面(3我们跳过60,每页30)并且我们有结果显示.

进一步阅读和信息

如何:通过查询结果进行翻页

具有实体框架的服务器端分页