Объединить значения определенного свойства на основе значения другого свойства в списке объектов в C #? - PullRequest
0 голосов
/ 12 октября 2018

В настоящее время у меня есть 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);                    
        }
     }
}

1 Ответ

0 голосов
/ 12 октября 2018

Вы делаете много бесполезных перечислений в вашей версии.Предполагая, что у вас есть список заказов, вы можете использовать GroupBy для выполнения большей части фильтрации:

var orderModelList = orders.GroupBy(o => o.Id)
    .Select(group => new OrderModel
    {
        Id = group.Key,
        Total = group.Sum(o => o.Total)
    })
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...