Vb.net 转换数据表
我有一个这样的数据表Vb.net 转换数据表,vb.net,linq,datatable,Vb.net,Linq,Datatable,我有一个这样的数据表 X,Y,Z 0,0,A 0,2,B 0,0,C 1,0,A 1,0,C 2,2,A 2,2,B 2,0,C 3,2,B 3,1,C 4,3,A 4,0,B 4,1,C 5,3,A 5,2,B 5,0,C 我想把它转换成这样的东西: X,A,B,C 0,0,2,0 1,0, ,0 2,2,2,0 3, ,2,1 4,3,0,1 5,3,2,0 我试过使用dataset和linq
X,Y,Z
0,0,A
0,2,B
0,0,C
1,0,A
1,0,C
2,2,A
2,2,B
2,0,C
3,2,B
3,1,C
4,3,A
4,0,B
4,1,C
5,3,A
5,2,B
5,0,C
我想把它转换成这样的东西:
X,A,B,C
0,0,2,0
1,0, ,0
2,2,2,0
3, ,2,1
4,3,0,1
5,3,2,0
我试过使用dataset和linq,但没有,我运气不好
我的linq代码:
Dim q = (From c In dt _
Select c("Z") Distinct) 'I found out which categories I have in Z column (my example :A,B,C)
Dim ldt(q.Count) As DataTable
For i = 0 To q.Count - 1
Dim sfil As String = q(i).ToString
Dim r = (From c In dt _
Select c Where c("Z") = sfil)
ldt(i) = r.CopyToDataTable
Next
现在我有3个表(ldt(0)和A的值,ldt(1)和B的值,ldt(2)和C的值)
我想做一些类似leftJoin的事情,但我尝试的任何事情都失败了。
有什么解决办法或者更好的主意吗
谢谢
因此,一个新的例子是:
我有这张桌子:
id,Price,Item
0,0,Laptop
0,2,Tablet
0,0,Cellphone
1,0,Laptop
1,0,Tablet
2,2,Laptop
2,2,Cellphone
2,0,Tablet
3,2,Cellphone
3,1,Tablet
4,3,Laptop
4,0,Cellphone
4,1,Tablet
5,3,Laptop
5,2,Cellphone
5,0,Tablet
我想把它转换成:
X,Laptop,Tablet,Cellphone
0,0,2,0
1,0, ,0
2,2,2,0
3, ,2,1
4,3,0,1
5,3,2,0
笔记本电脑、平板电脑和手机列中的每个列的值都是第一个表中的Y值
我希望它现在更有意义。我相信您可以创建一个列名称与项名称对应的DataTable。然后按
id
对上一个数据表进行分组,并使用每个分组填充一行。如果我做错了什么,请原谅我。我不经常使用VB或DataTables
Dim itemNames = (From c In dt _
Select c("Item") Distinct)
Dim newDt as DataTable = new DataTable()
Dim idColumn As DataColumn = new DataColumn()
idColumn.DataType = System.Type.GetType("System.Int32")
idColumn.ColumnName = "id"
idColumn.ReadOnly = True
idColumn.Unique = True
newDt.Columns.Add(idColumn)
For Each itemName As String In itemNames
Dim column As DataColumn = new DataColumn()
column.DataType = GetType(Nullable(Of Integer))
column.ColumnName = itemName
column.ReadOnly = True
column.Unique = False
newDt.Columns.Add(column)
Next
Dim groupingById = From row in dt
Group By Id = row("id")
Into RowsForId = Group
For Each grouping In groupingById
Dim row as DataRow = newDt.NewRow()
row("id") = grouping.Id
For Each rowForId in grouping.RowsForId
row(rowForId("Item")) = rowForId("Price")
Next
newDt.Rows.Add(row)
Next
我搞不懂你是怎么从起跑台到终点的。这两者之间的关系是什么?我知道你想按x分组,但我不知道A,B,Z是什么,以及y会发生什么。你能解释一下吗?顺便说一下,最好将示例数据视为代码(f.e.
table.Rows.Add(0,0,“A”)
)。然后我们可以立即测试它。对不起,我犯了一个错误,第二个数据表中的最后一列是C。所以第一个数据表来自数据库。我想将第一个数据集转换为第二个数据集,如下所示:1.为第一个数据表的Z列查找不同的值(在我的示例中为A、B、C)2。因此,在第二个数据表中,它将具有与第一个数据表不同的值X,以及A、B、C列,以及对应于X@GN_Habouf的值Y,我很高兴它起作用了!帮助别人有时感觉很棒