根据C#中的对象列表中其他属性的值组合某个属性的值?

时间:2018-10-12 16:09:24

标签: c# list linq

目前我有一个List<OrderModel>OrderModel是一个包含两个属性的类:OrderIdTotal。在这种情况下,OrderId不是唯一的。我想合并Total匹配的OrderId属性的值。

我有一个解决方案,但是我想知道是否有更好的方法(就性能而言)来完成此任务。这是我目前正在做的事情:

在填充List<OrderModel>对象时,我还将OrderId添加到List<long>中。所以现在我有两个列表。

foreach (var id in orderIdList.Distinct())
{
    var orders = orderModelList.Where(l => l.OrderId == id).ToList();
    if (orders.Count() > 1)
    {
        var firstOrder = orders.FirstOrDefault();
        orders.Remove(firstOrder);
        foreach (var order in orders)
        {
        firstOrder.Total += order.Total;
        orderModelList.Remove(order);                    
        }
     }
}

1 个答案:

答案 0 :(得分:4)

您正在版本中进行许多无用的枚举。假设您有一个订单列表,则可以使用GroupBy进行大多数过滤:

var orderModelList = orders.GroupBy(o => o.Id)
    .Select(group => new OrderModel
    {
        Id = group.Key,
        Total = group.Sum(o => o.Total)
    })
    .ToList();