2

List<T>ページングの目的でからデータを取得しようとしています。LINQでこれを行う方法:

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

    // What to do here?
}

これはページ 1 で機能します。上位 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

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 に答える
0
myData.Skip(pageSize * (pageNumber - 1)).Take(pageSize) //if first pageNumber = 1

基本的にはスキップして機能を取る必要があります

于 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 に答える