C# linq 如何分批循環遍歷IEnumerable?


我正在開發具有“IEnumerable用戶”的c#程序,其中存儲了400萬用戶的ID。我需要遍歷Ienummerable並每次提取一批1000個ID,以另一種方法執行一些操作。

我如何從Ienumerable的開始一次提取1000個ID ...做一些其他事情然后獲取下一批1000個

 

可以使用linq morelinq庫的 batch方法(可從NuGet獲得):

foreach(IEnumerable<User> batch in users.Batch(1000)) // use 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.Select(x => x); bucket = null; count = 0; } // Return the last bucket with all remaining elements if (bucket != null && count > 0) yield return bucket.Take(count); } 
yield return bucket;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM