Vb.net LINQ带字符串。Join()错误:“0”;System.InvalidCastException:无法强制转换类型为'&书信电报;识别器>;

Vb.net LINQ带字符串。Join()错误:“0”;System.InvalidCastException:无法强制转换类型为'&书信电报;识别器>;,vb.net,linq,Vb.net,Linq,我试图使用linq从数据表中获取一列的不同值,并使用string.join从结果中创建一个字符串,但得到: “System.InvalidCastException:无法将类型为'd_u7a`1[System.String]'的对象强制转换为类型为'System.String[]”。” 我的代码是: Dim retString As String = "" Dim uniqueCC2 = (From d As DataRow In dt.AsEnumerable() _

我试图使用linq从数据表中获取一列的不同值,并使用string.join从结果中创建一个字符串,但得到:

“System.InvalidCastException:无法将类型为'd_u7a`1[System.String]'的对象强制转换为类型为'System.String[]”。”

我的代码是:

Dim retString As String = ""

Dim uniqueCC2 = (From d As DataRow In dt.AsEnumerable() _
                 Select d.Field(Of String)("CageCardID")).Distinct

Try
     'I get the error on the following line
     retString = String.Join("</li><li>", uniqueCC2)
Catch ex As Exception
    ...error code...
End Try

Return "<li>" & retString & "</li>"
正在讨论的列(cagecardd)是varchar(8)…因此是一个字符串

当我深入到uniqueCC2时,它将值显示为字符串

任何帮助都将不胜感激

谢谢


George

如果您使用的是.NET,您使用的是哪个版本的.NET?3.5(Visual Studio 2008),有可能吗?尝试将
.ToArray()
添加到查询的末尾。一个旁注:我假设您希望将字符串包装在
  • 中。然后选择它们,这样您就不需要
    字符串了。Join
    …选择String.Format(
  • {0}),d.Field(字符串的)(“cagecardd”))).Distinct()
  • 谢谢Anthony和Tim…非常好的建议。它现在正在工作。是的,它是v3.5。GeorgeThough我不认为我们谈论的是海量数据,但我猜
    字符串.Join
    方法(在时间上)比调用
    字符串.Format()
    为每一个值更有效。Rene…是的,通常是20-100个项目左右…一点也不大。谢谢
    Dim uniqueCC2 = dt.AsEnumerable().Select(Function(s As DataRow) s.Field(Of String)("CageCardID")).Distinct()
    
     retString = String.Join("</li><li>", uniqueCC2.ToArray())
    
    ...
    Select String.Format("<li>{0}</li>", d.Field(Of String)("CageCardID"))).Distinct()
    
    Return String.Concat( uniqueCC2 ) ' no further delimiter needed