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)
有人可以帮助我吗?感谢任何帮助或建议。如果有问题请教我如何修复代码。非常感谢!!
您当前仅按 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)