按键分组的c#循环

按键分组的c#循环,c#,datatable,C#,Datatable,我在datatable上做了一个group by语句,如下所示: var finalResult = (from r in result.AsEnumerable() group r by new { r.Agent, r.Reason

我在datatable上做了一个group by语句,如下所示:

var finalResult = (from r in result.AsEnumerable()
                               group r by new
                               {
                                   r.Agent,
                                   r.Reason
                               } into grp
                               select new
                               {
                                   Agent = grp.Key.Agent,
                                   Reason = grp.Key.Reason,
                                   Count = grp.Count()
                               }).ToList();
agent1    reason1    4
agent1    reason2    7
agent2    reason1    8
agent2    reason2    3
..
...
...
agentn   reason1    3
agentn   reason2    11
最终结果将如下所示:

var finalResult = (from r in result.AsEnumerable()
                               group r by new
                               {
                                   r.Agent,
                                   r.Reason
                               } into grp
                               select new
                               {
                                   Agent = grp.Key.Agent,
                                   Reason = grp.Key.Reason,
                                   Count = grp.Count()
                               }).ToList();
agent1    reason1    4
agent1    reason2    7
agent2    reason1    8
agent2    reason2    3
..
...
...
agentn   reason1    3
agentn   reason2    11
我想循环查看代理名称,以便获得每个代理的原因和每个原因的计数换句话说:我需要构建这个:


您能告诉我如何从
finalResult
变量循环代理名称吗?

您可能想在LINQ中尝试GroupBy:


您可以阅读更多关于它的信息

您可能想在LINQ中尝试GroupBy:


您可以阅读更多信息

您还需要一个GroupBy,您就完成了:

var solution =
      finalResult
      .GroupBy(x => x.Agent);
foreach (var group in solution)
        {
            // group.Key is the agent
            // All items in group are a sequence of reasons and counts for this agent
            foreach (var item in group)
            {
                // Item has <Agent, Reason, Count> and belongs to the agent from group.Key
            }
        }
var解决方案=
最终结果
.GroupBy(x=>x.Agent);
foreach(解决方案中的var组)
{
//组。密钥是代理
//组中的所有项目都是此代理的一系列原因和计数
foreach(组中的var项目)
{
//项具有并属于组中的代理。项
}
}

外部循环将遍历所有代理(例如Agent1、Agent2等),而内部循环将遍历当前代理的所有原因。

您还需要一个GroupBy,您完成了:

var solution =
      finalResult
      .GroupBy(x => x.Agent);
foreach (var group in solution)
        {
            // group.Key is the agent
            // All items in group are a sequence of reasons and counts for this agent
            foreach (var item in group)
            {
                // Item has <Agent, Reason, Count> and belongs to the agent from group.Key
            }
        }
var解决方案=
最终结果
.GroupBy(x=>x.Agent);
foreach(解决方案中的var组)
{
//组。密钥是代理
//组中的所有项目都是此代理的一系列原因和计数
foreach(组中的var项目)
{
//项具有并属于组中的代理。项
}
}
外部循环将遍历所有代理(例如Agent1、Agent2等),而内部循环将遍历当前代理的所有原因。

也许:

var agentGroups = finalResult
    .GroupBy(x => x.Agent)
    .Select(ag => new
    {
        Agent = ag.Key,
        ReasonCounts = ag.GroupBy(x => x.Reason)
                         .Select(g => new
                         {
                             Agent = ag.Key,
                             Reason = g.Key,
                             Count = g.Sum(x => x.Count)
                         }).ToList(),
        Total_Count = ag.Sum(x => x.Count)
    });
foreach (var agentGroup in agentGroups)
{
    string agent = agentGroup.Agent;
    int totalCount = agentGroup.Total_Count;
    foreach (var reasonCount in agentGroup.ReasonCounts)
    {
        string reason = reasonCount.Reason;
        int count = reasonCount.Count;
    }
}
也许:

var agentGroups = finalResult
    .GroupBy(x => x.Agent)
    .Select(ag => new
    {
        Agent = ag.Key,
        ReasonCounts = ag.GroupBy(x => x.Reason)
                         .Select(g => new
                         {
                             Agent = ag.Key,
                             Reason = g.Key,
                             Count = g.Sum(x => x.Count)
                         }).ToList(),
        Total_Count = ag.Sum(x => x.Count)
    });
foreach (var agentGroup in agentGroups)
{
    string agent = agentGroup.Agent;
    int totalCount = agentGroup.Total_Count;
    foreach (var reasonCount in agentGroup.ReasonCounts)
    {
        string reason = reasonCount.Reason;
        int count = reasonCount.Count;
    }
}