根据C#中对象列表中不同属性的值组合特定属性的值?
目前我有一个根据C#中对象列表中不同属性的值组合特定属性的值?,c#,list,linq,C#,List,Linq,目前我有一个列表OrderModel是一个包含两个属性的类:OrderId和Total。在这种情况下,OrderId不是唯一的。我想组合Total属性的值,其中OrderId匹配 我有一个解决方案,但我想知道是否有更好的方法(从性能上讲)来完成这项任务。以下是我目前正在做的事情: 当我填充我的列表对象时,我还将OrderId添加到列表。现在我有两个列表 foreach (var id in orderIdList.Distinct()) { var orders = orderModel
列表
OrderModel
是一个包含两个属性的类:OrderId
和Total
。在这种情况下,OrderId
不是唯一的。我想组合Total
属性的值,其中OrderId
匹配
我有一个解决方案,但我想知道是否有更好的方法(从性能上讲)来完成这项任务。以下是我目前正在做的事情:
当我填充我的列表
对象时,我还将OrderId
添加到列表
。现在我有两个列表
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();