У меня есть несколько объектов 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;
}
Но я не уверен, куда идти отсюда
Вы можете использовать перегрузку 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}")
}
После группы 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