我有一个无法解决的问题......
我有一组数据,我想在二维列表中添加(在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
答案 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排序结果集。