如何使用LINQ分页数组?

Any*_*are 4 c# linq arrays pagination

如果我有这样的数组:

string[] mobile_numbers = plst.Where(r => !string.IsNullOrEmpty(r.Mobile))
                                          .Select(r => r.Mobile.ToString())
                                          .ToArray();
Run Code Online (Sandbox Code Playgroud)

我想根据这些页面分页这个数组并循环.

假设数组计数是400,我想采取the first 20然后the second 20等,直到数组结束处理每个20项目.

如何用linq做到这一点?.

Ser*_*kiy 14

使用SkipTake方法进行分页(但请记住,它将为您要采用的每个页面迭代集合):

int pageSize = 20;
int pageNumber = 2;
var result = mobile_numbers.Skip(pageNumber * pageSize).Take(pageSize);
Run Code Online (Sandbox Code Playgroud)

如果你只需要在'pages'上拆分数组,那么考虑使用MoreLinq(可从NuGet获得)Batch方法:

var pages = mobile_numbers.Batch(pageSize);
Run Code Online (Sandbox Code Playgroud)

如果您不想使用整个库,请查看Batch方法实现.或者使用此扩展方法:

public static IEnumerable<IEnumerable<T>> Batch<T>(
     this IEnumerable<T> source, int size)
{
    T[] bucket = null;
    var count = 0;

    foreach (var item in source)
    {
        if (bucket == null)            
            bucket = new T[size];


        bucket[count++] = item;

        if (count != size)            
            continue;            

        yield return bucket;

        bucket = null;
        count = 0;
    }

    if (bucket != null && count > 0)
        yield return bucket.Take(count).ToArray();
}
Run Code Online (Sandbox Code Playgroud)

用法:

int pageSize = 20;
foreach(var page in mobile_numbers.Batch(pageSize))
{   
    foreach(var item in page)
       // use items
}
Run Code Online (Sandbox Code Playgroud)