A bit of banding and grouping:
var groupedUsers = users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e})
.GroupBy(g => g.Index);
Live example: http://rextester.com/GZORR50968
To explain:
users
is the list of objects you want to group
users.Select((e,i) => new{ Index=Math.Floor(i/n),User=e})
projects that list into a list of anonymous objects with 2 properties:
Index
is the result of dividing the index of the item by the number of items you want in a groupUser
is the original object
At this point you'll end up with a list such as
- Index=0, User=a
- Index=0, User=b
- Index=0, User=c
- Index=1, User=d
- Index=1, User=e
- Index=1, User=f
- etc
Then you can just GroupBy
that Index
to get a list of lists.