我从.csv文件中解析了许多Case
对象,每个对象都包含brokerName
,id
和value
我有一个由案例对象填充的List<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;
}
但是我不确定从这里去哪里
答案 0 :(得分: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 :(得分: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