[Solved] Merge two collections and sum the fields for duplicate items


Use Concat, GroupBy and Sum:

List<SalesOrder> merged = Order1.Concat(Orders2)
    .GroupBy(so => so.Name)
    .Select(g => new SalesOrder(g.Key, g.First().Price, g.Sum(so => so.Quantity)))
    .ToList();

Consider that the Name could be equal but it has a different Price, so it’s actually a different product. Then you could group by an anonymous type containing both properties (ideally you use a unique identifier):

List<SalesOrder> merged = Order1.Concat(Orders2)
    .GroupBy(so => new { so.Name, so.Price })
    .Select(g => new SalesOrder(g.Key.Name, g.Key.Price, g.Sum(so => so.Quantity)))
    .ToList();

0

solved Merge two collections and sum the fields for duplicate items