General recursive extension method:
public static IEnumerable> SplitList(this IEnumerable source, int maxPerList)
{
var enumerable = source as IList ?? source.ToList();
if (!enumerable.Any())
{
return new List>();
}
return (new List>() { enumerable.Take(maxPerList) }).Concat(enumerable.Skip(maxPerList).SplitList(maxPerList));
}