Сумма значений по группам в Linq

2

У меня есть несколько объектов Case, которые были проанализированы из CSV файла, каждый из которых содержит имя brokerName, id и value

У меня есть List<Case> заполненный объектами case, и мне нужно вернуть общее значение всех объединенных случаев, сгруппированных по имени brokerName.

Поэтому, если существуют следующие данные

Case1: "Bob", 1, 200
Case2: "Bob", 2, 300
Case3: "Roger", 3, 100
Case4: "Keith", 4, 50
Case5: "Keith", 5, 300

Тогда возвращаемые значения будут

Bob: 500
Roger: 100
Keith: 350

Я хочу иметь возможность сделать это в Linq, но я не могу понять, как получить результат, который мне нужен. Я не уверен, как группировать, а затем суммировать значения.

Я чувствую, что для этого нужно использовать анонимный объект, и, создав анонимный объект, я могу отслеживать текущую сумму для каждого брокера. Но я не могу ответить на этот вопрос.

Пока у меня есть

var query = from c in CaseList
            group c by c.Broker
            select new
            {
                //?
            };

foreach(var c in query)
{
    decimal total = c.CaseValue;
}

Но я не уверен, куда идти отсюда

Теги:
linq

2 ответа

2

Вы можете использовать перегрузку GroupBy, чтобы преобразовать результаты группировки в требуемый формат:

var groups = list.GroupBy(x=> x.Broker, (broker,cases) => new { BrokerName = broker, Sum = cases.Sum(c=>c.value) });
foreach(var g in groups)
{
    Console.WriteLine($"{g.BrokerName} : {g.Sum}")
}
1

После группы Broker вы можете создать анонимный экземпляр в Select по new ключевому слову

var groups = list.GroupBy(x=> x.Broker)
                 .Select(g => new { BrokerName = g.Key, Sum = g.Sum(c => c.value) });
foreach(var g in groups)
{
    Console.WriteLine($"{g.BrokerName} : {g.Sum}")
}

он показывает результат нравится:

Bob: 500
Roger: 100
Keith: 350

Ещё вопросы

Сообщество Overcoder
Наверх
Меню