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

问题描述:

我需要计算几个不同列的出现次数。例如我的DataTable列是如下,它们只是字符串和日期类型计数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_Status = 'SLA错过' AND Data_Output_Type = '活动门票'

我的目标是返回一个DataTable或列表与记录,如下面

Assigned_Indivual - 已解决 - SLA警报 - SLA错过

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

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

先谢谢您Stack Oracles!

我能够得到一个人有多少次状态==“已解决”||状态==“关闭”使用下面

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

它返回一个数,如锤,5或玛丽,2 的代码,但我需要知道如何做到这一点,而无需使用WHERE条件,这样我可以算我上面列出的3个条件。

+3

列仅出现一次。基于已公布的..你要买哪里的条件,规定'Rows'数量..?这是一个非常简单的事情来处理你想要回报的事情,你也可以告诉我们你自己试过了什么,并期待有人做这项工作/给你答案... – MethodMan

+0

Absolutley,Im able to使用下面的代码获得第一个条件。这将返回状态为“已解决”||的次数“关闭” –

+0

,那么你应该能够完成剩下的..不知道是什么问题... – MethodMan

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

;)

+0

你是怎么做的,我不知道,谢谢!因此,您重新创建数据表和值为每个人distict然后又转换为列表变量,然后它是一个计算的问题。这很好,一整天都卡住了,几分钟之内你就做到了,谢谢 –