使用LINQ检索数据子集

时间:2012-12-13 15:32:38

标签: c# linq

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

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

    // What to do here?
}

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

7 个答案:

答案 0 :(得分:2)

您需要使用.Skip.Take

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

答案 1 :(得分: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);
}  

答案 2 :(得分:0)

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

基本上你必须使用跳过并执行功能

答案 3 :(得分:0)

myData.Skip((pageNumber - 1) * 8).Take(8);

答案 4 :(得分: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);
}

答案 5 :(得分:0)

pageNumber starts from 1:同时添加其他参数而不会破坏您的代码。

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

答案 6 :(得分:0)

在EF和L2S中,您必须订购列表,然后是Skip方法

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

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