Обратите внимание, что вызов .ToList()
дважды для одного и того же запроса будет дважды запрашивать базу данных.
Было бы гораздо лучше кэшировать результат в промежуточном списке, , затем примените предикатную фильтрацию:
var projectsByCat =
(from p in Projects
group p by p.Category into g
orderby g.Count() descending
select new { Category = g.Key, Projects = g }).ToList();
var oddCategories = projectsByCat.Where((cat, index) => index % 2 != 0);
var evenCategories = projectsByCat.Where((cat, index) => index % 2 == 0);