gpt4 book ai didi

c# - 分页 IEnumerable 数据集

转载 作者:行者123 更新时间:2023-11-30 17:23:05 25 4
gpt4 key购买 nike

是否有用于 IEnumberable 的任何内置分页函数(或使用更好的库)?我知道有 Take<>(),但我发现自己反复执行基本计算以确定给定页面大小的页面数。我意识到它的实现很简单,但这就是为什么我希望它已经在库中,但我只是错过了它。

我所说的分页是指指向当前记录的指针以及满足以下概念的内容。

.PageSize <- 获取/设置页面大小.Last <- 最后一页.Current <- 当前页面.JumpTo(页码)

如果页面大小或设置大小发生变化,使用故障保险确保您最终到达正确的位置

最佳答案

您可以使用 PagedList 包装列表 by Rob Conery . Troy Goode 还有一个扩展版本.

using System;
using System.Collections.Generic;
using System.Linq;

namespace System.Web.Mvc
{
public interface IPagedList
{
int TotalCount
{
get;
set;
}

int PageIndex
{
get;
set;
}

int PageSize
{
get;
set;
}

bool IsPreviousPage
{
get;
}

bool IsNextPage
{
get;
}
}

public class PagedList<T> : List<T>, IPagedList
{
public PagedList(IQueryable<T> source, int index, int pageSize)
{
this.TotalCount = source.Count();
this.PageSize = pageSize;
this.PageIndex = index;
this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
}

public PagedList(List<T> source, int index, int pageSize)
{
this.TotalCount = source.Count();
this.PageSize = pageSize;
this.PageIndex = index;
this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
}

public int TotalCount
{
get; set;
}

public int PageIndex
{
get; set;
}

public int PageSize
{
get; set;
}

public bool IsPreviousPage
{
get
{
return (PageIndex > 0);
}
}

public bool IsNextPage
{
get
{
return (PageIndex * PageSize) <=TotalCount;
}
}
}

public static class Pagination
{
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index, int pageSize)
{
return new PagedList<T>(source, index, pageSize);
}

public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index)
{
return new PagedList<T>(source, index, 10);
}
}
}

关于c# - 分页 IEnumerable 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com