C# Extension to split IEnumerable into batches of n items
This code splits a list into a batches on n items. If list = (1,2,3,4,5,6,7,8,9,10) and n = 3 then the result is ((1,2,3),(4,5,6),(7,8,9),(10)) public static class Extensions { public static IEnumerable<IEnumerable<T>> Batch<T>( this IEnumerable<T> list, int batchSize) { int i = 0; return list.GroupBy(x => (i++ / batchSize)).ToList(); } } [TestFixture] public class TestExtensions { [Test] public void TestBatch() { var list = new List< int >() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var result = list.Batch(3).ToList(); Assert.AreEqual(4, result.Count()); Assert.AreEqual(3, result[0].Count()); Assert.AreEqual(3, result[1].Count()); Assert.AreEqual(3, result[2].Count()); Assert.AreEqual(1, result[3].Count()); result.ForEach(x=>Console.WriteLine( string .Join(" , ",x))); } }