gpt4 book ai didi

vb.net - VB : Is it possible to cast/convert from List(Of DataRow) to List(Of String)?

转载 作者:行者123 更新时间:2023-12-04 18:21:01 25 4
gpt4 key购买 nike

我正在尝试解决有关列表类型的问题。首先,我的数据库中有一个存储过程,它选择单个列,我尝试在我的 VB 应用程序中继续它。通过创建一个方法函数,我声明了一个通过 SqlCommand 加载的 DataTable(具有 CloseConnection 行为)。之后,我公开声明了一个 List(Of String) ,它需要使用正在进行的存储过程中的行/项填充。下面是我的代码片段:

Dim dt As New DataTable()

Try
If conn.State = ConnectionState.Open Then
conn.Close()
Else
conn.Open()
Dim cmd = New SqlCommand("LoadCodes", conn)
cmd.CommandType = CommandType.StoredProcedure

dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
Dim collection As New List(Of DataRow)
collection = dt.AsEnumerable.ToList

LPrefix = collection.Cast(Of String)()

End If
Catch ex As Exception
MsgBox(ex.Message + vbCritical)
End Try

它是 LPrefix = collection.Cast(Of String)()我收到一个异常错误,告诉我我无法真正转换它。旧的时尚方式是使用 for/for 每个循环进行迭代,但这不是我想要最好地利用性能的方式,特别是如果列表将包含来自单个列的数千行。所以基本上我想在不使用 For/For Each 循环的情况下将该 DataTable 中的这些项目插入到 List(Of String) 中。

在 Visual Studio 2010 Ultimate、.NET Framework 4.0 上运行。

最佳答案

你不需要你的 collection一点也不。使用 LINQ,您可以直接从数据表中提取第一列:

dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))  
LPrefix = (From row In dt.AsEnumerable()
Select row.Field(Of String)(0)).ToList()

当然,这可能会在内部使用循环,但由于您想将每个值复制到字符串列表中,如果不循环遍历数据行就无法做到这一点。

另一种选择是使用 IEnumerable(Of String)而不是 List(Of String) :
dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))  
Dim LPrefixNew As IEnumerable(Of String) = _
From row In dt.AsEnumerable()
Select row.Field(Of String)(0)

您可以像遍历列表一样遍历 IEnumerable,但评估是惰性的:只要您不访问元素,就不会遍历 DataTable。因此,访问这个 IEnumerable 就像直接从 DataTable 中读取元素一样,只是以更方便的方式。

另一个忠告:在你衡量它之前,你不应该尝试对性能进行推理。例如,您的线路 collection = dt.AsEnumerable.ToList可能已经遍历整个 DataTable 并将每个 DataRow 引用复制到 DataRows 列表中;所以,有了这条线,你已经有了你试图避免的性能损失。

所以,不要自动假设某些 For循环总是比一些单一的语句慢。 Measure it ,然后优化。

关于vb.net - VB : Is it possible to cast/convert from List(Of DataRow) to List(Of String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com