使用 LINQ 检索数据子集



我正在尝试从List<T>检索数据以进行分页。如何在 LINQ 中执行此操作:

private List<MyData> GetPagingData(int pageNumber)
{
    if (pageNumber == 1)
        return myData.Take(8);
    // What to do here?
}

这适用于第一页。它返回前 8 条记录。我如何使第 2 页等工作...

如果希望页码从 0 开始:

private IEnumerable<MyData> GetPagingData(int pageNumber, int perPage)
{
     return myData.Skip(pageNumber * perPage).Take(perPage);
}  

如果希望页码从 1 开始:

private IEnumerable<MyData> GetPagingData(int pageNumber, int perPage)
{
     return myData.Skip((pageNumber-1) * perPage).Take(perPage);
}  

你需要使用 .Skip.Take

private List<MyData> GetPagingData(int pageNumber)
{
    int itemsPerPage = 8;
    return myData.Skip(itemsPerPage * (pageNumber - 1)).Take(itemsPerPage).ToList();
}
myData.Skip((pageNumber - 1) * 8).Take(8);
private List<MyData> GetPagingData(int pageNumber, int itemsPerPage)
{
    //Don't subtract 1 if you are using 0-based pageNumbers.
    int skip = (pageNumber - 1) * itemsPerPage;
    return myData.Skip(skip).Take(itemsPerPage);
}

pageNumber starts from 1: 还可以在不破坏代码的情况下添加另一个参数。

private List<MyData> GetPagingData(int pageNumber, int? itemsPerPage)
{
    itemsPerPage = itemsPerPage ?? 8;
    return myData.Skip(itemsPerPage * (pageNumber-1)).Take(itemsPerPage);
}

在 EF 和 L2S 中,您必须对列表进行排序,然后对 Skip 方法进行排序

private List<MyData> GetPagingData(int pageNumber, int itemsPerPage)
{
    return myData.OrderBy(i => i.Something).Skip(pageNumber * itemsPerPage).Take(itemsPerPage);
}

使用此代码,您的第一页将为 0

myData.Skip(pageSize * (pageNumber - 1)).Take(pageSize) //if first pageNumber = 1

基本上你必须玩跳过和获取功能

最新更新