2012-09-19 84 views
0

我有這樣轉換一個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 

一個DataTable,我想將其轉換爲這樣的事情:

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個表(LDT(0)與甲值,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值。

我希望現在更有意義。

+3

我無法弄清楚你如何從起始表到結束表。這兩者之間的關係是什麼? –

+1

我看到你想按x分組,但是我沒有計劃A,B,Z是什麼以及y發生了什麼。你能解釋一下嗎?順便說一下,將示例數據視爲代碼(f.e​​.'table.Rows.Add(0,0,「A」)')會更好。然後我們可以立即測試它。 –

+0

對不起,我犯了一個錯誤,第二個數據表中的最後一列是C. 所以第一個數據表來自數據庫。 我想將第一個數據集轉換爲第二個數據集,如下所示: 1.找到第一個數據表的Z列的不同值(在我的情況下爲A,B,C) 2.因此,在第二個數據表中,它將具有不同的值X從第一個數據表和列A,B,C與相應的值Y對於X – Nianios

回答

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 
+0

你是神人。 你救我。 – Nianios

+0

@ GN_Habouf我很高興它的工作! D.幫助人們有時感覺很棒:D –