2

我正在尝试从 a 中检索数据以List<T>进行分页。如何在 LINQ 中做到这一点:

private List<MyData> GetPagingData(int pageNumber)
{
    if (pageNumber == 1)
        return myData.Take(8);

    // What to do here?
}

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

4

7 回答 7

2

您需要使用.Skip.Take

private List<MyData> GetPagingData(int pageNumber)
{
    int itemsPerPage = 8;
    return myData.Skip(itemsPerPage * (pageNumber - 1)).Take(itemsPerPage).ToList();
}
于 2012-12-13T15:34:29.197 回答
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);
}  
于 2012-12-13T15:35:30.177 回答
0
myData.Skip(pageSize * (pageNumber - 1)).Take(pageSize) //if first pageNumber = 1

基本上你必须玩skip和take函数

于 2012-12-13T15:35:04.550 回答
0
myData.Skip((pageNumber - 1) * 8).Take(8);
于 2012-12-13T15:36:37.187 回答
0
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);
}
于 2012-12-13T15:36:38.517 回答
0

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

private List<MyData> GetPagingData(int pageNumber, int? itemsPerPage)
{
    itemsPerPage = itemsPerPage ?? 8;
    return myData.Skip(itemsPerPage * (pageNumber-1)).Take(itemsPerPage);
}
于 2012-12-13T15:37:46.473 回答
0

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

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

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

于 2012-12-13T15:38:17.620 回答