2014-10-22 68 views
1

字符串数组我与数据表列的工作,我希望获取数据表到字符串数组的一列,然后要分配给AutoCompleteStringCollection对象。目前我使用循环填充“AutoCompleteStringCollection”,但如果我有500行以上,则需要时间。我想用out循环来做到这一点。任何机构都可以建议更好的方法。数据表列在Vb.Net

Dim autocomp As New AutoCompleteStringCollection 
     For index As Integer = 0 To unionTable.Rows.Count - 1 
      autocomp.Add(unionTable.Rows(index)(1).ToString()) 
     Next 

我想要做的不循环,帮助请

有点挣扎,我设法做this.with的.Net 3.5框架

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Try 
     Dim table1 As DataTable = New DataTable("Test") 
     table1.Columns.Add("name") 
     table1.Columns.Add("id") 
     table1.Rows.Add("Abb", 1) 
     table1.Rows.Add("Killers", 2) 

     Dim allAutoCompletes = From row In table1.AsEnumerable() 
         Let autoComplete = row.Field(Of String)(0) 
         Select autoComplete 
     Dim autoCompleteString As String() = allAutoCompletes.ToArray() 
     Dim x As String = "" 
     Dim autocomp As New AutoCompleteStringCollection 
     autocomp.AddRange(autoCompleteString) 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

回答

5

你总是要使用一个循环之后。但是你可以使用LINQ它看起来更好:

Dim allAutoCompletes = From row In unionTable.AsEnumerable() 
         Let autoComplete = row.Field(Of String)(1) 
         Select autoComplete 
Dim autoCompleteStringCollection As String() = allAutoCompletes.ToArray() 

如果你想有一个List(Of String)使用ToList

下面是与上述相同的方法的语法,用什么你找到更具可读性:

Dim autoCompleteStringCollection As String() = unionTable.AsEnumerable(). 
    Select(Function(r) r.Field(Of String)(1)). 
    ToArray() 
+0

但这个错误:“AsEnumerable”不是“System.Data.DataTable” – DareDevil 2014-10-22 07:35:15

+0

一员,您必须使用> = .NET 3.5并添加'Imports System.Linq'。你还必须添加一个对'System.Data.DataSetExtensions'的引用到你的项目中,它应该没问题。 – 2014-10-22 07:36:00

+0

仍然没有效果 – DareDevil 2014-10-22 07:37:13