如何使用 C# 聚合重复记录并求和

Jam*_*Lee 2 c# linq aggregation

我想创建一个列表,其中包含多个代理以及他们拨打的电话数量,如下所示:

public class Agent
{
    public string Agent_ID{ get; set; }
    public string Name { get; set; }
    public int Calls { get; set; }

}

var list = new List<Agent>() // To create a list to hold the data
{ 
    new Agent() { Agent_ID = "TK_J", Name = "James", Calls = 10 },
    new Agent() { Agent_ID = "TK_K", Name = "Kurtis", Calls = 10 },
    new Agent() { Agent_ID = "TK_R", Name = "Rebecca", Calls = 5 },
    new Agent() { Agent_ID = "TK_J", Name = "James", Calls = 10 },
    new Agent() { Agent_ID = "TK_R", Name = "Rebecca", Calls = 5 },
    new Agents(){ Agent_ID = "TK_B", Name = "Bobby", Calls = 10 },
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,将会有多余的数据行。所以我想使用C#聚合函数如group by来汇总相似坐席的呼叫次数。我正在尝试的是:

list.GroupBy(i => i.Agent_ID).Select(g => new 
{ 
Agent_ID= g.Key, 
Name = */ How do i bring the name here*/, 
Calls = g.Sum(i => i.Calls)});
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?感谢任何帮助或建议。如果有问题请教我如何修复代码。非常感谢!!

sca*_*tag 5

您当前仅按 AgentID 进行分组。您需要将所需的字段投影为匿名对象,以便它们可供IGrouping<annonymous,Agent>选择。见下文。

list.GroupBy(i => new {i.Agent_ID, i.Name}).Select(g => new 
{ 
Agent_ID= g.Key.Agent_ID, 
Name = g.Key.Name, 
Calls = g.Sum(i => i.Calls)
});
Run Code Online (Sandbox Code Playgroud)