3 回答
TA贡献1831条经验 获得超9个赞
听起来您需要使用对象的“跳过”和“获取”方法。例:
users.Skip(1000).Take(1000)
这将跳过前1000个,并采用下一个1000。您只需要增加每次通话跳过的数量
您可以将整数变量与“跳过”参数一起使用,并且可以调整要跳过的量。然后可以在方法中调用它。
public IEnumerable<user> GetBatch(int pageNumber)
{
return users.Skip(pageNumber * 1000).Take(1000);
}
TA贡献1890条经验 获得超9个赞
最简单的方法可能就是使用GroupByLINQ中的方法:
var batches = myEnumerable
.Select((x, i) => new { x, i })
.GroupBy(p => (p.i / 1000), (p, i) => p.x);
但是,对于更复杂的解决方案,请参阅此博客文章,以了解如何创建自己的扩展方法来执行此操作。为后代在此复制:
public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> collection, int batchSize)
{
List<T> nextbatch = new List<T>(batchSize);
foreach (T item in collection)
{
nextbatch.Add(item);
if (nextbatch.Count == batchSize)
{
yield return nextbatch;
nextbatch = new List<T>();
// or nextbatch.Clear(); but see Servy's comment below
}
}
if (nextbatch.Count > 0)
yield return nextbatch;
}
- 3 回答
- 0 关注
- 1107 浏览
添加回答
举报