所以我有一个看起来或多或少像
的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)
答案 0 :(得分:6)
它位于数据集合中,因此我们需要将其删除。
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