繁体   English   中英

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

[英]Combine the values of a certain property based on the value of a different property in a List of Objects in C#?

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

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

在填充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);                    
        }
     }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM