Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
При использовании LINQ для SQL или LINQ к Объектам, необходимо сначала полностью осуществить результаты в память:
var oddCategories = projectsByCat.ToList().Where((c,i) => i % 2 != 0);
var evenCategories = projectsByCat.ToList().Where((c,i) => i % 2 == 0);
не возможно выполнить итерации через результаты на базе данных с индексатором без использования курсора, который любой платформа ORM делает не , делают.
Обратите внимание, что вызов .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);