I have a collection "cases" (IEnumerable<IPublishedContent>
), which I would like to split into chunks like the following, where each second row contains two columns:
<div class="row">
<div class="col">1</div>
</div>
<div class="row">
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
</div>
<div class="row">
<div class="col">5</div>
<div class="col">6</div>
</div>
I have seen different approaches using extension methods, e.g. .Chunk(2)
, .Batch(2)
or .Split(2)
, but mostly where it is splitted into fixed sizes e.g. [1,2], [3,4], [5,6], [7]
For now I have the following:
var batches = w
.Select((x, i) => new { x, i })
.GroupBy(p => (p.i / (p.i % 2 == 0 ? 2 : 1)), p => p.x);
var rows = batches;
var count = 0;
foreach (var row in rows)
{
<div class="row">
@foreach (var c in row)
{
<div class="col">@(count+1)</div>
count++;
}
</div>
}
When the collection contains 7 elements, the output is:
<div class="row">
<div class="col">1</div>
</div>
<div class="row">
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
<div class="col">5</div>
</div>
<div class="row">
<div class="col">6</div>
</div>
<div class="row">
<div class="col">7</div>
</div>
Any suggestion how I can get the output as in the first example?