合并两个集合并对重复项的字段求和

str*_*own -8 c#

我有两个系列:

public interface ISomeNeededInterface
{
    string Name { get; set; }
    Guid Guid { get; set; }
}

public class Order : ISomeNeededInterface
{
    public string Name { get; set; }
    public Guid Guid { get; set; }
}

public class SalesOrder
{   
  public string Name { get { return Item.Name;} }
  public double Price { get; set; }
  public int Quantity { get; set; }
  private ISomeNeededInterface Item { get; private set; }

  public SalesOrder(ISomeNeededInterface _item)
  {
    Item = _item;
    Price = _item.Pricce;
    Quantity = _item.Quantity;
  }   
}

List<SalesOrder> Orders1 = new List<SalesOrder>()
  {
     new SalesOrder(new Order {"Ballon1", Guid.NewGuid();}, 2.54, 1),
     new SalesOrder(new Order {"Ballon2", Guid.NewGuid();}, 2.54, 1),
  };

List<SalesOrder> Orders2 = new List<SalesOrder>()
  {
     new SalesOrder(new Order {"Ballon1", Guid.NewGuid();}, 2.54, 2),
     new SalesOrder(new Order {"Ball", Guid.NewGuid();}, 4.52, 1)
  };
Run Code Online (Sandbox Code Playgroud)

如何将两个集合合并为一个,以及合并那些与"名称"字段重合的元素?同时,对于元素,合并的名称必须是"Quantity"字段的总和.最后一定是

List<SalesOrder> SummOrders = {"Ballon1", 2.54, 3, SOME_Item; "Ballon2", 2.54, 1, SOME_Item ;  "Ball", 4.52, 1, SOME_Item }
Run Code Online (Sandbox Code Playgroud)

编辑:需要澄清简单问题?好的,有更真实的"编辑"

Tim*_*ter 8

使用Concat,GroupBySum:

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();
Run Code Online (Sandbox Code Playgroud)

考虑到它Name可能是相同的,但它有不同的Price,所以它实际上是一个不同的产品.然后,您可以按包含两个属性的匿名类型进行分组(理想情况下,您使用唯一标识符):

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();
Run Code Online (Sandbox Code Playgroud)