我可以改进这些分页扩展方法吗?
我刚刚编写了几个分页扩展方法,我很想知道是否可以做出任何改进。
我对基本分页方法非常满意,您可以提供页面大小和页码(如下所示),
public static IEnumerable<T> Paginate<T>(this IEnumerable<T> source, int pageSize, int pageNumber)
{
if (pageSize == 0) throw new ArgumentOutOfRangeException("pageSize");
if (pageNumber == 0) throw new ArgumentOutOfRangeException("pageNumber");
return source.Skip(pageSize * (pageNumber - 1)).Take(pageSize);
}
但我想知道是否有更好的方法来执行“自动”分页,它返回一个 IEnumerable
public static IEnumerable<IEnumerable<T>> Paginate<T>(this IEnumerable<T> source, int pageSize)
{
source.ThrowIfNull("source");
if (pageSize == 0) throw new ArgumentOutOfRangeException("pageSize");
var pageCount = (int)Math.Ceiling(source.Count() / (double)pageSize);
if (pageSize == 1)
pageCount = source.Count();
for (int i = 1; i <= pageCount; i++)
{
yield return source.Paginate(pageSize, i);
}
}
必须迭代两次似乎有点可疑(一次用于计数,一次用于收益率返回。
有没有任何明显的方法可以改进这些方法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看一下 MoreLinq Batch:- http ://code.google.com/p/morelinq/source/browse/trunk/MoreLinq/Batch.cs?r=84
其实现为:
Take a look at MoreLinq Batch :- http://code.google.com/p/morelinq/source/browse/trunk/MoreLinq/Batch.cs?r=84
Which is implemented as: