Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态地将行转换为列_C#_Sql Server_Datatable_Transpose_Orders - Fatal编程技术网

C# 动态地将行转换为列

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 |

我用的是c#, 我的Windows窗体中有一个DataTable,如下所示

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。这正是我要找的。