using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Data.DataSetExtensions;
public static void Main()
DataTable dt = new DataTable();
dt.Columns.Add("UID", typeof(string));
dt.Columns.Add("Emp Name", typeof(string));
dt.Columns.Add("Role", typeof(string));
dt.Columns.Add("Sup ID", typeof(string));
dt.Columns.Add("Sup Name", typeof(string));
dt.Columns.Add("Designation", typeof(string));
dt.Columns.Add("Volume", typeof(int));
dt.Columns.Add("Error_Time", typeof(TimeSpan));
dt.Columns.Add("ACW", typeof(TimeSpan));
dt.Columns.Add("Break Time", typeof(TimeSpan));
dt.Columns.Add("Idle", typeof(TimeSpan));
dt.Columns.Add("Non Productive", typeof(TimeSpan));
row1["Emp Name"] = "Romson";
row1["Designation"] = "Associate";
row1["Error_Time"] = new TimeSpan(1, 8, 11);
row1["ACW"] = new TimeSpan(0, 11, 45);
row1["Break Time"] = new TimeSpan(0, 54, 40);
row1["Idle"] = new TimeSpan(0, 1, 46);
row1["Non Productive"] = DBNull.Value;
row2["Emp Name"] = "Romson";
row2["Designation"] = "Associate";
row2["Error_Time"] = new TimeSpan(0, 0, 0);
row2["ACW"] = new TimeSpan(0, 0, 0);
row2["Break Time"] = DBNull.Value;
row2["Idle"] = DBNull.Value;
row2["Non Productive"] = DBNull.Value;
row3["Emp Name"] = "Revati";
row3["Designation"] = "Sr. Associate";
row3["Error_Time"] = new TimeSpan(1, 20, 29);
row3["ACW"] = new TimeSpan(0, 8, 15);
row3["Break Time"] = new TimeSpan(0, 40, 48);
row3["Idle"] = DBNull.Value;
row3["Non Productive"] = new TimeSpan(0, 31, 26);
row4["Emp Name"] = "Revati";
row4["Designation"] = "Sr. Associate";
row4["Error_Time"] = new TimeSpan(2, 35, 21);
row4["ACW"] = new TimeSpan(1, 26, 42);
row4["Break Time"] = new TimeSpan(0, 50, 58);
row4["Idle"] = new TimeSpan(0, 17, 41);
row4["Non Productive"] = DBNull.Value;
row5["Emp Name"] = "Shrutika";
row5["Designation"] = "Senior Associate";
row5["Error_Time"] = new TimeSpan(0, 49, 04);
row5["ACW"] = new TimeSpan(0, 12, 23);
row5["Break Time"] = new TimeSpan(0, 36, 41);
row5["Idle"] = DBNull.Value;
row5["Non Productive"] = DBNull.Value;
var Temp_DT = dt.AsEnumerable().Select(x =>
DESIGNATION = x["Designation"],
ERRORTIME = x["Error_Time"],
BREAKTIME = x["Break Time"],
NONPRODUCTIVE = x["Non Productive"],
}).GroupBy(s => new { s.UID, s.EMPNAME, s.EMPROLE, s.SUPID, s.SUPNAME, s.DESIGNATION })
var grouped = g.ToList();
DESIGNATION = g.Key.DESIGNATION,
VOLUME = grouped.Sum(x => Convert.ToInt16(x.VOLUME)),
Error_Time = new TimeSpan(grouped.Select(x => ConvertTimeSpan(x.ERRORTIME.ToString())).ToList().Sum(r=> r.Ticks)),
ACW = new TimeSpan(grouped.Select(x => ConvertTimeSpan(x.ACWTIME.ToString())).ToList().Sum(r=> r.Ticks)),
Break = new TimeSpan(grouped.Select(x => ConvertTimeSpan(x.BREAKTIME.ToString())).ToList().Sum(r=> r.Ticks)),
Idle = new TimeSpan(grouped.Select(x => ConvertTimeSpan(x.IDLETIME.ToString())).ToList().Sum(r=> r.Ticks)),
NonProductive = new TimeSpan(grouped.Select(x => ConvertTimeSpan(x.NONPRODUCTIVE.ToString())).ToList().Sum(r=> r.Ticks))
foreach (var item in Temp_DT)
Console.WriteLine(string.Format("{0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8}", item.UID, item.EMPNAME, item.DESIGNATION, item.VOLUME, item.Error_Time, item.ACW, item.Break, item.Idle, item.NonProductive));
private static TimeSpan ConvertTimeSpan(string str)
TimeSpan.TryParse(str, out outputValue);