所以我有一个看起来或多或少的DataTable
Column 0 | Column 1
Something | Something Else
Another Thing | Another Something Else
Run Code Online (Sandbox Code Playgroud)
我想把第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
Run Code Online (Sandbox Code Playgroud)
但那已经过时了.我想要做
returnValue = (From r In dt.Rows Select DirectCast(r, DataRow).Item(0)).ToList
Run Code Online (Sandbox Code Playgroud)
但这给了我一个(对象)列表.
我怎样才能直接创建一个列表(String)
(DirectCast就在那里,因为我有Option Strict On)
它位于数据集合中,因此我们需要将其抛弃.
Select询问哪个字段中的函数是您想要的来自对象的对象.
returnValue = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList
Run Code Online (Sandbox Code Playgroud)
dt.Rows来自 .NET 泛型之前,因此它不会返回IEnumerable(Of DataRow). 但是,有一个扩展方法DataTable.AsEnumerable,它完全符合您的需要:
returnValue = (From r In dt.AsEnumerable() Select r.Field(Of String)(0)).ToList()
Run Code Online (Sandbox Code Playgroud)
请注意,我的示例还使用了DataRow.Field扩展方法,该方法允许对 DataRow 字段进行类型安全的访问,而无需显式强制转换(即使使用 Option Strict On)。
感谢@Heinzi 的回答。我用它来编写我自己的示例,我将在下面发布该示例。这是一个完整的 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
Run Code Online (Sandbox Code Playgroud)