目前我有一个List<OrderModel>
。 OrderModel
是一个包含两个属性的类:OrderId
和Total
。在这种情况下,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);
}
}
}
答案 0 :(得分:4)
您正在版本中进行许多无用的枚举。假设您有一个订单列表,则可以使用GroupBy
进行大多数过滤:
var orderModelList = orders.GroupBy(o => o.Id)
.Select(group => new OrderModel
{
Id = group.Key,
Total = group.Sum(o => o.Total)
})
.ToList();