У меня есть куча статей, и я хочу сгруппировать их по категориям. Это было бы просто с GroupBy (x => x.Category), за исключением того, что некоторые статьи имеют несколько категорий. Как я могу сгруппировать свои статьи, чтобы, если они были разделены на две категории, они попадали в обе группы категорий?
пример:
Article 1, category:apples, oranges
Article 2, category:apples
Article 3, cateogry:oranges
Я бы выделил две категории: яблоки и апельсины:
apples: Article 1, Article 2
orange: Article 1, Article 3
Я добавил пример того, что ищу
Выполните GroupBy для каждой категории.
Я не обязательно знаю, какие у меня категории, прежде чем запускать это, они динамические. Я пытаюсь найти наиболее эффективный способ сделать это





Если я правильно понял вашу проблему, вы можете сделать следующее:
var groups =
products.SelectMany(p => p.Categories,
(p, c) => new { Product = p, Category = c })
.GroupBy(p => p.Category, p => p.Product);
Соответствующая перегрузка SelectMany - Вот этот.
Эквивалентный синтаксис запроса намного лучше:
var groups = from p in products
from c in p.Categories
group p by c into g
select g;
Спасибо Сервировка за указание на очевидный способ перевести беглую версию в синтаксис запроса (я пытался преобразовать его слишком буквально).
var categories = articles.selectMany(x => x.categoies).Distinct().Select(x => {
var categoriziedArticles = articles.Where(z => z.cagories.Conains(x)));
return new Category(categoriziedArticles);
});
Может что-то вроде этого. Я не пробовал это компилировать.
Может быть, вы хотите поделиться с нами примерами, своим кодом и ожидаемым результатом.