C# 动态地将行转换为列
我用的是c#, 我的Windows窗体中有一个DataTable,如下所示C# 动态地将行转换为列,c#,sql-server,datatable,transpose,orders,C#,Sql Server,Datatable,Transpose,Orders,我用的是c#, 我的Windows窗体中有一个DataTable,如下所示 Ref1 | ItemNo | ItemDesc 1 | 54637 | Cleaner 2 | 54638 | Cloth 1 | 54638 | Cloth 1 | 54639 | Spray Bottle 2 | 54637 | Cleaner 我需要在一个单独的列中获得每个参考文献1的所有产品。所以我需要得到以下信息 Ref1 |
Ref1 | ItemNo | ItemDesc
1 | 54637 | Cleaner
2 | 54638 | Cloth
1 | 54638 | Cloth
1 | 54639 | Spray Bottle
2 | 54637 | Cleaner
我需要在一个单独的列中获得每个参考文献1的所有产品。所以我需要得到以下信息
Ref1 | ItemNo1 | ItemNo2 | ItemNo3 | ItemNo4
1 | 54637 | 54638 | 54639 | NULL
2 | 54638 | 54637 | NULL | NULL
我可能有多达50个项目的一些参考,但只有1或2为其他人
完成这项工作最有效的方法是什么?我想没有真正好的方法,但它应该是这样工作的
DataTable table = new DataTable();
table.Columns.Add("Ref1", typeof(int));
table.Columns.Add("ItemNo", typeof(int));
table.Columns.Add("ItemDesc", typeof(string));
table.Rows.Add(1, 12345, "Test");
table.Rows.Add(1, 12346, "Test2");
table.Rows.Add(1, 12347, "Test3");
table.Rows.Add(2, 12345, "Test");
DataTable tableNew = new DataTable();
tableNew.Columns.Add("Ref1", typeof(int));
var result = table.AsEnumerable().GroupBy(x => x.Field<int>("Ref1"));
var max = result.Max(x => x.Count());
for (int i = 1; i <= max; i++)
{
tableNew.Columns.Add($"ItemNo{i}", typeof(int));
}
foreach (var group in result)
{
var newRow = tableNew.NewRow();
newRow.SetField<int>("Ref1", group.Key);
var itemNo = 1;
foreach(var row in group)
{
var val = row.Field<int>("ItemNo");
newRow.SetField<int>($"ItemNo{itemNo}", val);
itemNo++;
}
tableNew.Rows.Add(newRow);
}
DataTable=newdatatable();
表.列.添加(“参考1”,类型(int));
表.列.添加(“项目编号”,类型(int));
table.Columns.Add(“ItemDesc”,typeof(string));
表.行.添加(112345,“测试”);
增加(112346,“测试2”);
添加(112347,“Test3”);
表.行.添加(212345,“测试”);
DataTableNew=新DataTable();
tableNew.Columns.Add(“参考1”,类型(int));
var result=table.AsEnumerable().GroupBy(x=>x.Field(“Ref1”);
var max=result.max(x=>x.Count());
对于(int i=1;我欢迎使用SO。您能向我们展示您迄今为止所做的尝试吗?您好,您是否尝试过类似的方法:。搜索有关如何透视DataTable的示例并不难谢谢您的用户1711390。这正是我要找的。