Linq to DataSet Group By Sum
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn col1 = new DataColumn("NAME", typeof(string));
DataColumn col2 = new DataColumn("VALUE", typeof(int));
dt.Columns.Add(col1);
dt.Columns.Add(col2);
dt.Rows.Add("A", 1);
dt.Rows.Add("A", 2);
dt.Rows.Add("B", 3);
dt.Rows.Add("B", 4);
dt.Rows.Add("B", 5);
dt.Rows.Add("C", 1);
dt.Rows.Add("C", 2);
ds.Tables.Add(dt);
// 여기부터 LINQ 시작
var query = from test in ds.Tables[0].AsEnumerable()
group test by test.Field<string>("NAME") into grp
select new
{
Id = grp.Key,
Sum = grp.Sum(r => r.Field<int>("VALUE"))
};
// LINQ 종료 및 결과 DataTable 생성
DataTable dt_result = new DataTable();
dt_result.Columns.Add("ID");
dt_result.Columns.Add("VALUE");
// LINQ 결과를 DataTable에 저장
foreach(var result in query)
{
dt_result.Rows.Add(result.Id, result.Sum);
}
또는
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
var products = ds.Tables["Product"].AsEnumerable();
var query = from product in products
group product by product.Field<string>("Style") into g
select new
{
Style = g.Key,
AverageListPrice =
g.Average(product => product.Field<Decimal>("ListPrice"))
};
foreach (var product in query)
{
Console.WriteLine("Product style: {0} Average list price: {1}",
product.Style, product.AverageListPrice);
}