Linq 함수를 이용하여 Pivot 테이블을 생성하는 C# 코드 입니다.
참고하세요.
실행 결과입니다.(Linq 패드를 이용하여 출력한 결과입니다.)
원본 테이블 => Pivot 초기화 테이블 => Pivot 결과물
DataTable dt = new DataTable(); dt.Columns.Add("Key"); dt.Columns.Add("Value"); dt.Rows.Add(new[] {"US","18"}); dt.Rows.Add(new[] {"EN","17"}); dt.Rows.Add(new[] {"RU","16"}); dt.Rows.Add(new[] {"RU","16"}); dt.Rows.Add(new[] {"US","18"}); dt.Rows.Add(new[] {"US","15"}); dt.Rows.Add(new[] {"FR","15"}); DataTable newdt = new DataTable(); newdt.Columns.Add("Key"); List keyArr = dt.AsEnumerable() .Select(r => r[0].ToString()).Distinct().ToList(); keyArr.ForEach(v => newdt.Rows.Add(new[]{v})); List valueArr = dt.AsEnumerable() .Select(r => r[1].ToString()).Distinct().OrderBy(r=>r).ToList(); valueArr.ForEach(v => { DataColumn c = new DataColumn(v,typeof(int)); c.DefaultValue = 0; newdt.Columns.Add(c); } ); var group = dt.AsEnumerable().GroupBy(r => r[0], r => r[1]).ToList(); Dictionary<string,ValueTuple[]> pivot = dt.AsEnumerable().GroupBy(r => r[0], r => r[1]) .ToDictionary(g => g.Key.ToString(), g => g.GroupBy(sg => sg).Select(sg => (sg.Key.ToString(),sg.Count())).ToArray()); foreach(DataRow row in newdt.Rows) { foreach(var t in pivot[row["Key"].ToString()]) { row[t.Item1] = t.Item2; } }