如何使用 C# 聚合重复记录和求和值
本文关键字:记录 求和 何使用 | 更新日期: 2023-09-27 18:34:05
我想创建一个列表,其中包含多个座席以及他们拨打的电话数量,并且这样做:
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 },
};
如您所见,将有冗余的数据行。所以我想使用 C# 聚合函数(如分组依据)来汇总类似代理的调用次数。我正在尝试的是:
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)});
有人可以帮助我吗?感谢任何帮助或建议。如果有问题,请教我如何修复代码。非常感谢!!
您当前仅按代理 ID 进行分组。您需要将所需的字段投影为匿名对象,以便它们可以用作所选字段的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)
});
假设Agent_ID
将与代理的Name
属性同步,您还可以使用聚合(如 First()
)从组中的任何Agent
记录返回名称,因为每个组中的所有代理都将具有相同的名称:
list.GroupBy(i => i.Agent_ID)
.Select(g => new Agent // Strong class
{
Agent_ID= g.Key.Agent_ID,
Name = g.First().Name,
Calls = g.Sum(i => i.Calls)
})
另外,既然你似乎投射回了相同的形状,为什么不保留并投射到强类,而不是一个新的阴离子类呢?