在Linq中创建批处理

在Linq中创建批处理

有人能建议在Linq中创建一定大小的批次吗?

理想情况下,我希望能够在一定数量的块中执行操作。


慕尼黑5688855
浏览 520回答 3
3回答

慕勒3428872

你不需要写任何代码。使用MoreLINQ批处理方法,它将源序列分批到大小相同的桶中(MoreLINQ可作为可以安装的NuGet包使用):int&nbsp;size&nbsp;=&nbsp;10;var&nbsp;batches&nbsp;=&nbsp;sequence.Batch(size);其实施方式是:public&nbsp;static&nbsp;IEnumerable<IEnumerable<TSource>>&nbsp;Batch<TSource>( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;IEnumerable<TSource>&nbsp;source,&nbsp;int&nbsp;size){ &nbsp;&nbsp;&nbsp;&nbsp;TSource[]&nbsp;bucket&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;count&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;item&nbsp;in&nbsp;source) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bucket&nbsp;==&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bucket&nbsp;=&nbsp;new&nbsp;TSource[size]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bucket[count++]&nbsp;=&nbsp;item; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(count&nbsp;!=&nbsp;size) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;return&nbsp;bucket; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bucket&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bucket&nbsp;!=&nbsp;null&nbsp;&&&nbsp;count&nbsp;>&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;return&nbsp;bucket.Take(count);}

largeQ

如果你一开始sequence定义为IEnumerable<T>,并且您知道可以安全地多次枚举它(例如,因为它是一个数组或一个列表),您只需使用这个简单的模式来分批处理元素:while&nbsp;(sequence.Any()){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;batch&nbsp;=&nbsp;sequence.Take(10); &nbsp;&nbsp;&nbsp;&nbsp;sequence&nbsp;=&nbsp;sequence.Skip(10); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;whatever&nbsp;you&nbsp;need&nbsp;to&nbsp;do&nbsp;with&nbsp;each&nbsp;batch&nbsp;here}
打开App,查看更多内容
随时随地看视频慕课网APP