0

私はこのようなデータテーブルを持っています

  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

データセットと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つのテーブル(Aの値を持つldt(0)、Bの値を持つldt(1)、Cの値を持つldt(2))があり、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値です。

私はそれが今より理にかなっていることを願っています。

4

1 に答える 1

0

アイテム名に対応する列名でDataTableを作成できると思います。次に、前の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
于 2012-09-19T19:37:04.190 に答える