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
使用Skip和Take方法进行分页(但请记住,它将为您要采用的每个页面迭代集合):
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)
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |