多维列表 - vb

时间:2014-02-05 13:39:35

标签: vb.net list

我有一个无法解决的问题......

我有一组数据,我想在二维列表中添加(在Visual Basic中)

sql查询的结果是:

ID   value1 value2
0001  a      10
0001  b      10
0002  a      30
0002  b      20
0002  c      15
0003  a       5

...

所以,我想将所有元素添加到二维列表中:

    Dim multilist As New List(Of List(Of String))
    multilist.Add(New List(Of String))
    multilist.Add(New List(Of String))
    multilist.Add(New List(Of String))

我需要一个vb代码,将不同ID的elemenet添加到一个二维列表的不同列表中

谢谢你:)

结果必须是:

in first list elements 1 and 2
in the second list elements 3,4,5
in the third list the last element

1 个答案:

答案 0 :(得分:2)

您应该使用DataTable,然后您只需使用DataAdapter来填充它,Linq-To-DataSet来获取您的ID组和List(Of DataTable)

Dim table = New DataTable()
Using con = New SqlClient.SqlConnection("Connection-String")
    Using da = New SqlDataAdapter("SQL-Query", con)
        da.Fill(table)
    End Using
End Using

Dim idGroups = From row In table
               Let id = row.Field(Of String)("ID")
               Group row By id Into Group
Dim idTables As List(Of DataTable) = idGroups.
    Select(Function(x) x.Group.CopyToDataTable()).
    ToList()

由于您使用的是.NET 2 LINQ不是一个选项。以下是使用Dictionary代替List的方法,其中键是ID,值是DataTable

Dim idTables As New Dictionary(Of String, DataTable)
For Each row As DataRow In table.Rows
    Dim id As String = DirectCast(row("ID"), String)
    Dim dt As DataTable = Nothing
    If Not idTables.TryGetValue(id, dt) Then
        dt = table.Clone() ' empty table with same schema '
        idTables.Add(id, dt)
    End If
    dt.ImportRow(row)
Next

这不需要按ID排序结果集。