1 - Рассматривая следующую коллекцию тестов:
List<Order> orders = new List<Order>
{
new Order
{
OrderNumber = "o1",
ProductsWithQuantities = new List<ProductWithQuantity>
{
new ProductWithQuantity{ProductName = "p1", Quantity=1},
new ProductWithQuantity{ProductName = "p2", Quantity=2},
}
},
new Order
{
OrderNumber = "o2",
ProductsWithQuantities = new List<ProductWithQuantity>
{
new ProductWithQuantity{ProductName = "p1", Quantity=1},
new ProductWithQuantity{ProductName = "p2", Quantity=2},
}
}
};
2 - Вы можете использовать SelectManay
для выравнивания всего продукта. и сгруппировать по ProductName
, создав новую коллекцию, например, следующий код:
var result = orders
.SelectMany(x => x.ProductsWithQuantities.Select(y => new { x.OrderNumber, y.ProductName, y.Quantity }))
.GroupBy(p => p.ProductName)
.Select(x => new
{
ProductName = x.Key,
OrderWithQuantities = x.Select(y => new { OrderNumer = y.OrderNumber, Quantity = y.Quantity }).ToList()
})
.ToList();
3 - Демо
foreach(var item in result)
{
Console.WriteLine($"{item.ProductName} : " +
$"{string.Join(",", item.OrderWithQuantities.Select(x => $"{x.OrderNumer}::{x.Quantity}"))}");
}
4 - Результат:
p1 : o1::1,o2::1
p2 : o1::2,o2::2
Я надеюсь, что это поможет.