【问题标题】:Count Number of occurrences of column values in DataTable - Tricky [closed]计数DataTable中列值的出现次数 - 棘手[关闭]
【发布时间】:2016-05-31 20:18:32
【问题描述】:

我需要计算几个不同列的出现次数。例如我的数据表列如下,它们只是字符串和日期类型

[Case___], [Status],[Summary] ,[Description], 
[assigned_group], [Assigned_Individual], [Alert_Status],
[Date_Time_Created], [Date_Time_Resolved] ,
[Date_Time_Closed] ,[Data_Output_Type]

对于每个 ****Assigned_Individual** 我需要计算

此人状态已解决的次数||关闭

此人出现Alert_Status = 'SLA Alert' AND St​​atus 'Resolved' AND St​​atus 'Closed'

的次数

此人Alert_Status = 'SLA Missed' AND Data_Output_Type = 'Active Tickets'

的次数

我的目标是返回带有如下记录的 DataTable 或 List

Assigned_Indivual - 已解决 - SLA 警报 - SLA 未命中

鲍勃, 5, 1, 4 玛丽,2,1,3 阿什利,7,0,3

我现在只是在寻找方向,因为我知道我可能需要使用 LINQ,我什至无法理解这样做的方法。

提前感谢 Stack Oracles!

我能够获得一个人拥有状态 == “已解决” || 的次数Status == "Closed" 使用下面的代码

var groupedData = from b in dt.AsEnumerable()
                          where b.Field<string>("Status") == "Resolved" || b.Field<string>("Status") == "Closed"
                          group b by new
                          {
                              Assigned_Individual = b.Field<string>("Assigned_Individual"),
                              Status = b.Field<string>("Status"),
                              assigned_group = b.Field<string>("assigned_group")
                          }
                              into g

                              let Counter = g.Count()
                              select new
                              {
                                  Assigned_Individual = g.Key.Assigned_Individual,
                                  Status = g.Key.Status,
                                  assigned_group = g.Key.assigned_group,
                                  Count = Counter
                              };

返回一个计数,例如 bob, 5 OR Mary, 2 但我需要知道如何在不使用 where 条件的情况下执行此操作,以便我可以计算上面列出的 3 个条件。

【问题讨论】:

  • 这些列只出现一次.. 根据您发布的内容.. 您是否正在寻找声明这些条件的Rows 的数量..?关于您想要返回的内容,这是一件非常简单的事情,您能否也向我们展示您自己尝试过的内容与期望有人完成工作/给您答案...
  • 绝对,我能够使用下面的代码获得第一个条件。这将返回状态为 == "已解决" || 的次数“关闭”
  • 那么你应该可以做剩下的了..不确定问题是什么..
  • 我在上面已经解释得更深入了,如果不清楚,请见谅

标签: c# linq datatable counter


【解决方案1】:
// Make a datatable Result
var dtResult = new DataTable();
dtResult.Columns.Add("Assigned_Indivual");
dtResult.Columns.Add("Resolved");
dtResult.Columns.Add("SLA Alert");
dtResult.Columns.Add("SLA Missed");

// Get All assigneds
var assigneds = dTable.AsEnumerable().Select(a => a.Field<string>("Assigned_Individual")).Distinct();

foreach(var assigned in assigneds)
{
    // Get All results os assigned indexed
    var resultOfAssigned = dTable.AsEnumerable().Where(a => a.Field<string>("Assigned_Individual") == assigned).ToList();

    // Count of results
    var resultResolved = resultOfAssigned.Where(a => a.Field<string>("Status") == "Closed").Count();
    var resultAlert = resultOfAssigned.Where(a => a.Field<string>("Alert_Status") == "SLA Alert" && a.Field<string>("Status") == "Resolved" && a.Field<string>("Status") == "Closed").Count();
    var resultMissed = resultOfAssigned.Where(a => a.Field<string>("Alert_Status") == "SLA Missed" && a.Field<string>("Data_Output_Type") == "Active Tickets").Count();

    // Define a data row
    var dRow = dtResult.NewRow();
    dRow[0] = assigned;
    dRow[1] = resultResolved;
    dRow[2] = resultAlert;
    dRow[3] = resultMissed;

    // Insert datarow in Datatable result
    dtResult.Rows.Add(dRow);
}

;)

【讨论】:

  • 你是怎么做到的,我不知道谢谢!因此,您重新创建数据表,并且每个人的值都是不同的,然后将其转换为列表变量,然后进行计数。这很好用,我一整天都被卡住了,你在几分钟内就完成了,谢谢
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多