我正在尝试从List<T>
检索数据以进行分页。如何在LINQ中执行此操作:
private List<MyData> GetPagingData(int pageNumber)
{
if (pageNumber == 1)
return myData.Take(8);
// What to do here?
}
这适用于第一页。它返回前8条记录。我如何为第2页等工作......
答案 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