using System.Collections.Generic;
static void Main(string[] args)
string filepath = @"C:\Users\HP\Desktop\RPA.csv";
DataTable res = ConvertCSVtoDataTable(filepath);
string[] agg_group_cols = new string[] { "Ex" };
string[] agg_calc_cols = new string[] { "Salary"};
DataTable ss = aggrigateData(res, agg_group_cols, agg_calc_cols);
Double.TryParse(error, out result);
Console.WriteLine(result);
private static DataTable aggrigateData(DataTable dt, string[] agg_group_cols, string[] agg_calc_cols)
Dictionary<string, Dictionary<int, string[]>> dictionary = new Dictionary<string, Dictionary<int, string[]>>();
Console.WriteLine("Total Columns" + dt.Columns.Count);
IList<int> agg_cols_index = new List<int>();
IList<int> agg_value_index = new List<int>();
foreach (var dr in dt.Columns)
if (agg_group_cols.Contains(dr.ToString()))
agg_cols_index.Add(index);
if (agg_calc_cols.Contains(dr.ToString()))
agg_value_index.Add(index);
foreach (DataRow dr in dt.Rows)
IList<string> hash_columns_value = new List<string>();
foreach (var aci in agg_cols_index)
hash_columns_value.Add(dr.ItemArray[aci].ToString());
string has_key = string.Join("|", hash_columns_value.ToArray());
if (dictionary.ContainsKey(has_key.ToString()))
foreach (var aci in agg_value_index)
float cal_val = Convert.ToInt32(dictionary[has_key.ToString()][0][aci]) + Convert.ToInt32(dr.ItemArray[aci].ToString());
dictionary[has_key.ToString()][0][aci] = cal_val.ToString();
var single = new Dictionary<int, string[]>();
single.Add(0,dr.ItemArray.Cast<string>().ToArray());
dictionary.Add(has_key.ToString(), single);
foreach (string key in dictionary.Keys)
foreach (KeyValuePair<int, string[]> kvp in dictionary[key])
Console.WriteLine(kvp.Key + " : " + string.Join("\t", kvp.Value));
public static string[] Add(string[] array, string newValue)
int newLength = array.Length + 1;
string[] result = new string[newLength];
for (int i = 0; i < array.Length; i++)
result[newLength - 1] = newValue;
public static string[] RemoveAt(string[] array, int index)
int newLength = array.Length - 1;
string[] result = new string[newLength];
for (int i = 0; i < array.Length; i++)
result[newCounter] = array[i];
public static DataTable ConvertCSVtoDataTable(string strFilePath)
StreamReader sr = new StreamReader(strFilePath);
string[] headers = sr.ReadLine().Split(',');
DataTable dt = new DataTable();
foreach (string header in headers)
string[] rows = System.Text.RegularExpressions.Regex.Split(sr.ReadLine(), ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
DataRow dr = dt.NewRow();
for (int i = 0; i < headers.Length; i++)