Вы можете расширить блоги с их списком категорий до новой последовательности только категории, прежде чем сгруппировать ее:
_client.GetRecords().Result.SelectMany(blog => blog.Category).GroupBy(x => x.Category).Select(x => x.Key + "-" + x.Count());
x - это IGrouping, в основном как список вместе с ключом. Вы можете делать с ним то же, что и в Списке, например, Count или First. Каждый элемент в списке имеет общий ключ, который был выбран как часть GroupBy. В этом случае ваш x, ключом которого является «Путешествие», является списком длинной категории 20
Кстати, (при условии, что GetRecords возвращает задание) подумайте, следует ли вам использовать .Result
- он блокирует вызывающий поток до операция завершена, что является отличным способом обнулить все преимущества шаблона Asyn c на основе задач и вернуться к синхронному коду. Если вместо этого вы await
GetRecords (который должен называться GetRecordsAsyn c), он освободит поток до go и будет выполнять другие действия, пока возвращаются записи
(await _client.GetRecords()).SelectMany(blog => blog.Category).GroupBy(x => x.Category).Select(x => x.Key + "-" + x.Count());
Если вы хотите чтобы сохранить объект Blog после того, как SelectMany закончил, вы можете использовать:
(await _client.GetRecords()).SelectMany(b => blog.Category, (b, c) => new { Blog = blog, Cat = c })
Вы получите перечисляемый объект, содержащий Nblogs * Ncategories (25 элементов)