我正在尝试从 a 中检索数据以List<T>
进行分页。如何在 LINQ 中做到这一点:
private List<MyData> GetPagingData(int pageNumber)
{
if (pageNumber == 1)
return myData.Take(8);
// What to do here?
}
这适用于第一页。它返回前 8 条记录。我如何使这项工作适用于第 2 页等...
您需要使用.Skip
和.Take
:
private List<MyData> GetPagingData(int pageNumber)
{
int itemsPerPage = 8;
return myData.Skip(itemsPerPage * (pageNumber - 1)).Take(itemsPerPage).ToList();
}
如果您希望页码从 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);
}
myData.Skip(pageSize * (pageNumber - 1)).Take(pageSize) //if first pageNumber = 1
基本上你必须玩skip和take函数
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