Разверните товары и их модификаторы через SelectMany, умножьте количество модификатора на Quantity позиции корзины, затем сгруппируйте записи и сложите количества.
Используя LINQ, посчитайте по вложенной модели корзины плоскую статистику товаров и модификаторов: имя и итоговое количество. Нужно учитывать Quantity элемента корзины и для модификаторов.
Разверните товары и их модификаторы через SelectMany, умножьте количество модификатора на Quantity позиции корзины, затем сгруппируйте записи и сложите количества.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Разверните товары и их модификаторы через SelectMany, умножьте количество модификатора на Quantity позиции корзины, затем сгруппируйте записи и сложите количества.
Пусть item имеет Name, Quantity и Modifiers, а у каждого modifier есть Name и Quantity — количество на одну единицу товара:
var statistics = cart.SelectMany(item =>
new[] { new { Name = item.Name, Count = (long)item.Quantity } }
.Concat(item.Modifiers.Select(m => new {
Name = m.Name,
Count = (long)item.Quantity * m.Quantity
})))
.GroupBy(x => x.Name)
.Select(g => new { Name = g.Key, Count = g.Sum(x => x.Count) })
.ToList();
Если в модификаторе количество уже итоговое, повторно умножать его нельзя. Группировка по имени может объединить разные сущности с одинаковым названием; в реальной модели безопаснее группировать по ID и типу. Точная схема классов в условии отсутствует, поэтому эти предположения нужно согласовать.