Получение нечетной/ровной части последовательности с LINQ

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

23
задан Manfred Radlwimmer 23 May 2016 в 06:44
поделиться

2 ответа

При использовании LINQ для SQL или LINQ к Объектам, необходимо сначала полностью осуществить результаты в память:

var oddCategories  = projectsByCat.ToList().Where((c,i) => i % 2 != 0);
var evenCategories = projectsByCat.ToList().Where((c,i) => i % 2 == 0);

не возможно выполнить итерации через результаты на базе данных с индексатором без использования курсора, который любой платформа ORM делает не , делают.

42
ответ дан Mark Cidade 29 November 2019 в 00:50
поделиться

Обратите внимание, что вызов .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);
23
ответ дан Jacob Carpenter 29 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: