我正在循环一个表数据库以捕获某些行的名字
代码如下:
Try
While (readerFirstName.Read())
SearchedName = readerFirstName("parteA")
CombinatedNames = CombinatedNames & " & " & SearchedName
End While
Catch ex As Exception
MsgBox(ex.ToString())
End Try
所需的结果就像
迈克&艾瑞克&汤姆但我得到
&安培;迈克&艾瑞克&汤姆
我想我可以摆脱第一个“&”在使用String.TrimStart
创建字符串之后但是有更好的方法来削减第一个“&”?
答案 0 :(得分:5)
尝试更换循环:
While (readerFirstName.Read())
SearchedName = readerFirstName("parteA")
CombinatedNames = CombinatedNames & " & " & SearchedName
End While
有了这个:
Dim names As New List(Of String)()
While (readerFirstName.Read())
names.Add(readerFirstName("parteA"))
End While
CombinatedNames = String.Join(" & ", names)
这里的主要思想是使用String.Join
method在单个操作中连接单个名称。该方法对集合起作用,因此您首先必须将单个项目读入集合names
。
此方法将在项目之间添加分隔符字符串" & "
,从不在第一个或最后一个之后,因此您不会最终使用前导或尾随分隔符(除非您的列表中有空项目。)
PS:如果您事先知道将从readerFirstNames
读取多少个名称,您可以通过将名称计数传递给List(Of T)
构造函数来优化我建议代码的内存使用量(如{ {1}}参数)。
答案 1 :(得分:2)
在添加文本之前,您可以检查合并字符串中的包含
While (readerFirstName.Read())
SearchedName = readerFirstName("parteA")
If Not isNullOrEmpty(CombinatedNames) Then
CombinatedNames = CombinatedNames & " & " & SearchedName
Else
CombinatedNames = SearchedName
End If
End While
答案 2 :(得分:2)
其他答案是通常的做法,但这里有一些更懒惰的选择:
这将删除前3个字符:
CombinatedNames = Mid( CombinatedNames , 4 )
这会从字符串的开头修剪和
&
:
CombinatedNames = CombinatedNames.TrimStart(" "c, "&"c)
答案 3 :(得分:2)
或者您可以只读取第一条记录,然后连接其余记录:
CombinatedNames = If(readerFirstName.Read, readerFirstName!parteA.ToString, "")
While readerFirstName.Read
CombinatedNames &= " & " & readerFirstName!parteA.ToString
End While