상세 컨텐츠

본문 제목

Linq to DataSet Group By Sum

C#/LINQ

by 탑~! 2011. 11. 11. 15:11

본문


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);
}

'C# > LINQ' 카테고리의 다른 글

LINQPad 를 이용해 보세요  (0) 2011.11.11
LINQ 아키텍처  (0) 2010.09.16
LINQ: .NET 통합 언어 쿼리  (0) 2008.04.04

관련글 더보기