The solution 1 by
mr.priyank is good.
Alternatively the
Field
extension method of
DataRow
explained here
http://msdn.microsoft.com/en-us/library/bb360891.aspx[
^] and
CopyToDataTable
extension method of
IEnumerable
explained here
http://msdn.microsoft.com/en-us/library/bb359707[
^] can be used as follows:
DataTable data = new DataTable("Data");
data.Columns.Add("UserId",typeof(string),null);
data.Columns.Add("DateOfTravel",typeof(DateTime),null);
data.Columns.Add("Amount",typeof(double),null);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("hi-IN");
data.Rows.Add("101",DateTime.Parse("01/05/2012"),1000);
data.Rows.Add("101",DateTime.Parse("02/05/2012"),500);
data.Rows.Add("101",DateTime.Parse("05/05/2012"),700);
data.Rows.Add("102",DateTime.Parse("11/05/2012"),800);
data.Rows.Add("103",DateTime.Parse("02/05/2012"),850);
DataTable groupedData = new DataTable("GroupedData");
groupedData.Columns.Add("UserId",typeof(string),null);
groupedData.Columns.Add("Sum",typeof(double),null);
data.AsEnumerable().GroupBy (dr => dr.Field<string>("UserId"))
.Select (dr => {
DataRow row = groupedData.NewRow();
row["UserId"]=dr.Key;
row["Sum"] = dr.Sum (d => d.Field<double>("Amount"));
return row;
}).CopyToDataTable(groupedData,LoadOption.OverwriteChanges);