How to change DataTable Rows to Columns in C#(如何在 C# 中将 DataTable 行更改为列)
本文介绍了如何在 C# 中将 DataTable 行更改为列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将数据表行更改为列
How to Change dataTable Rows to Columns
DataTable dt=new DataTable();
dt = getData(); //Pull data from source file
我在数据表中有以下格式行.
I have below format rows in a dataTable.
现在我想将 ANC_TYPE 行更改为列?我怎样才能转换成以下格式?
Now I want change ANC_TYPE rows into columns? How i can convert into below format ?
推荐答案
你想要一个数据透视表:
You want a pivot table :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication49
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("OPR_DT", typeof(DateTime));
dt.Columns.Add("OPR_HR", typeof(int));
dt.Columns.Add("ANC_TYPE", typeof(string));
dt.Columns.Add("ANC_REGION", typeof(string));
dt.Columns.Add("MARKET_RUN_ID", typeof(string));
dt.Columns.Add("XML_DATE_ITEM", typeof(string));
dt.Columns.Add("MW", typeof(decimal));
dt.Columns.Add("GROUP", typeof(int));
dt.Rows.Add(new object[] { DateTime.Parse("2/23/2017"), 1, "NR", "AS_CAISO_EXP", "DAM", "NS_CLR_PRC", 0.09, 1});
dt.Rows.Add(new object[] { DateTime.Parse("2/23/2017"), 1, "RD", "AS_CAISO_EXP", "DAM", "RD_CLR_PRC", 2.83, 2 });
dt.Rows.Add(new object[] { DateTime.Parse("2/23/2017"), 2, "NR", "AS_CAISO_EXP", "DAM", "NS_CLR_PRC", 0.01, 3 });
dt.Rows.Add(new object[] { DateTime.Parse("2/23/2017"), 2, "RD", "AS_CAISO_EXP", "DAM", "RD_CLR_PRC", 0.1, 4 });
string[] uniqueAncType = dt.AsEnumerable().Select(x => x.Field<string>("ANC_TYPE")).Distinct().ToArray();
DataTable pivot = new DataTable();
pivot.Columns.Add("OPR_DT", typeof(DateTime));
pivot.Columns.Add("OPR_HR", typeof(int));
pivot.Columns.Add("ANC_REGION", typeof(string));
pivot.Columns.Add("MARKET_RUN_ID", typeof(string));
foreach (string col in uniqueAncType)
{
pivot.Columns.Add(col, typeof(string));
}
var groups = dt.AsEnumerable()
.GroupBy(x => new {
opr_dt = x.Field<DateTime>("OPR_DT"),
opr_hr = x.Field<int>("OPR_HR"),
anc_region = x.Field<string>("ANC_REGION"),
run_id = x.Field<string>("MARKET_RUN_ID")
}).ToList();
foreach (var group in groups)
{
DataRow newRow = pivot.Rows.Add();
newRow["OPR_DT"] = group.Key.opr_dt;
newRow["OPR_HR"] = group.Key.opr_hr;
newRow["ANC_REGION"] = group.Key.anc_region;
newRow["MARKET_RUN_ID"] = group.Key.run_id;
foreach (DataRow ancType in group)
{
newRow[ancType.Field<string>("ANC_TYPE")] = ancType.Field<decimal>("MW");
}
}
}
}
}
这篇关于如何在 C# 中将 DataTable 行更改为列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在 C# 中将 DataTable 行更改为列
猜你喜欢
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 输入按键事件处理程序 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01