计算 DataTable 中列值的出现次数 - Tricky

Count Number of occurrences of column values in DataTable - Tricky

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

[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 状态 <> 'Resolved' AND 状态 <> 'Closed'[=40 的次数=]

此人有 Alert_Status = 'SLA Missed' AND Data_Output_Type = 'Active Tickets'[=12= 的次数]

我的目标是 return 具有如下记录的 DataTable 或 List

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

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

目前我只是在寻找方向,因为我知道我可能需要使用 LINQ,我什至无法理解执行此操作的方法。

提前感谢 Stack Oracles!

我能得到一个人拥有状态的次数== "Resolved" ||状态 == "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
                              };

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

// 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);
}

;)