Используя LINQ, посчитайте по вложенной модели корзины плоскую статистику товаров и модификаторов: имя и итоговое количество. Нужно учитывать Quantity элемента корзины и для модификаторов.

Разверните товары и их модификаторы через SelectMany, умножьте количество модификатора на 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 и типу. Точная схема классов в условии отсутствует, поэтому эти предположения нужно согласовать.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее