使用VB.NET中的LINQ从数据表填充List(Of String)

时间:2015-06-04 13:17:04

标签: vb.net linq

所以我有一个看起来或多或少像

的DataTable
 Column 0      |  Column 1 
 Something     |  Something Else 
 Another Thing |  Another Something Else

我想将第0列中的所有内容放入List(Of String)

我能做到

Dim returnValue as List(Of String)    
For Each r As DataRow In dt.Rows
     returnValue.Add(r.Item(0).ToString)
Next

但那已经过时了。我想做

returnValue = (From r In dt.Rows Select DirectCast(r, DataRow).Item(0)).ToList

但是这给了我一个(对象)列表。

如何直接创建(String)列表

(DirectCast就在那里,因为我有Option Strict On)

3 个答案:

答案 0 :(得分:6)

它位于数据集合中,因此我们需要将其删除。

Cast

Select中的函数询问你想从铸造对象中找到哪个字段。

returnValue = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList

答案 1 :(得分:3)

dt.Rows来自.NET泛型之前,因此它不会返回IEnumerable(Of DataRow)。但是,有一种扩展方法DataTable.AsEnumerable,它可以完全满足您的需求:

returnValue = (From r In dt.AsEnumerable() Select r.Field(Of String)(0)).ToList()

请注意,我的示例还使用DataRow.Field扩展方法,该方法允许对DataRow字段进行类型安全访问,而无需显式强制转换(即使使用Option Strict On)。

答案 2 :(得分:2)

对上述亨氏的答案表示感谢。我用它编写了自己的示例,并将在下面发布。这是一个完整的VB程序示例,可能对高级用户来说更好。

我已经测试过并确认它可以正常工作。谢谢!

Sub Main
    
    Dim dataTable1 As New DataTable
    Dim listOfString As New List(Of String)
    
    dataTable1.Columns.Add("DT Column Title" , GetType(String))
    
    dataTable1.Rows.Add("1234")
    dataTable1.Rows.Add("1235")
    dataTable1.Rows.Add("1236")
    dataTable1.Rows.Add("1237")
    
    listOfString = (From item In dataTable1.AsEnumerable() Select item.Field(Of String)(0)).ToList()
    
End Sub