计算 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);
}
;)
我需要计算几个不同列的出现次数。例如我的数据表列如下,它们只是字符串和日期类型
[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);
}
;)