根据 c# 中数据 table 的日期年份分组
Group by based on year in date from data table in c#
我有这样的数据table(付款月份列为日期)
PaymentMonth Amount
01/01/2014 100
01/02/2014 200
01/03/2014 200
01/01/2015 300
01/02/2015 300
01/01/2016 200
我需要如下输出数据table(按付款月份列中的年份分组)
Year Amount
2014 500
2015 600
2016 200
获取输出数据table 使用 linq 或在 c# 中计算
谢谢
M.帕布
你需要这样的东西:
var result = datatable.AsEnumerable()
.GroupBy(r => DateTime.Parse(r["PaymentMonth"].ToString()).Year)
.Select(x=> new { Year = x.Key,
Amount = x.Sum(r=>Int32.Parse(r["Amount"])
}
).OrderBy(x=>x.Year);
我假设 PaymentMonth
是一个 DateTime
对象,data
是保存您的数据的集合。
作为学习练习,我已经按照下面的方式完成了。我是 LINQ 的新手,所以不能保证这是否是最有效的方法,但它仍然有效并且可以自行解释。
DataTable dt = new DataTable();
dt.Columns.Add("PaymentMonth", typeof(System.DateTime));
dt.Columns.Add("Amount", typeof(int));
dt.Rows.Add(new DateTime(2014, 1, 1), 100);
dt.Rows.Add(new DateTime(2014, 2, 1), 200);
dt.Rows.Add(new DateTime(2014, 3, 1), 200);
dt.Rows.Add(new DateTime(2015, 1, 1), 300);
dt.Rows.Add(new DateTime(2015, 2, 1), 300);
dt.Rows.Add(new DateTime(2016, 1, 1), 200);
var sumResult = from amt in dt.AsEnumerable()
group amt by amt.Field<System.DateTime>("PaymentMonth").Year into agg
select new { Year=agg.Key,SumAmount=agg.Sum(r=>r.Field<int>("Amount")) };
DataTable dtAgg = new DataTable();
dtAgg.Columns.Add("Year",typeof(int));
dtAgg.Columns.Add("Amount", typeof(int));
foreach(var item in sumResult)
{
dtAgg.Rows.Add(item.Year, item.SumAmount);
}
DataTable dtAgg 现在包含如下聚合数据
Year Amount
2014 500
2015 600
2016 200
我有这样的数据table(付款月份列为日期)
PaymentMonth Amount
01/01/2014 100
01/02/2014 200
01/03/2014 200
01/01/2015 300
01/02/2015 300
01/01/2016 200
我需要如下输出数据table(按付款月份列中的年份分组)
Year Amount
2014 500
2015 600
2016 200
获取输出数据table 使用 linq 或在 c# 中计算
谢谢 M.帕布
你需要这样的东西:
var result = datatable.AsEnumerable()
.GroupBy(r => DateTime.Parse(r["PaymentMonth"].ToString()).Year)
.Select(x=> new { Year = x.Key,
Amount = x.Sum(r=>Int32.Parse(r["Amount"])
}
).OrderBy(x=>x.Year);
我假设 PaymentMonth
是一个 DateTime
对象,data
是保存您的数据的集合。
作为学习练习,我已经按照下面的方式完成了。我是 LINQ 的新手,所以不能保证这是否是最有效的方法,但它仍然有效并且可以自行解释。
DataTable dt = new DataTable();
dt.Columns.Add("PaymentMonth", typeof(System.DateTime));
dt.Columns.Add("Amount", typeof(int));
dt.Rows.Add(new DateTime(2014, 1, 1), 100);
dt.Rows.Add(new DateTime(2014, 2, 1), 200);
dt.Rows.Add(new DateTime(2014, 3, 1), 200);
dt.Rows.Add(new DateTime(2015, 1, 1), 300);
dt.Rows.Add(new DateTime(2015, 2, 1), 300);
dt.Rows.Add(new DateTime(2016, 1, 1), 200);
var sumResult = from amt in dt.AsEnumerable()
group amt by amt.Field<System.DateTime>("PaymentMonth").Year into agg
select new { Year=agg.Key,SumAmount=agg.Sum(r=>r.Field<int>("Amount")) };
DataTable dtAgg = new DataTable();
dtAgg.Columns.Add("Year",typeof(int));
dtAgg.Columns.Add("Amount", typeof(int));
foreach(var item in sumResult)
{
dtAgg.Rows.Add(item.Year, item.SumAmount);
}
DataTable dtAgg 现在包含如下聚合数据
Year Amount
2014 500
2015 600
2016 200