Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据C#中对象列表中不同属性的值组合特定属性的值?_C#_List_Linq - Fatal编程技术网

根据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();