Я совершенно не понимаю, почему linq выбрасывает Unable для приведения объекта типа System.Int32 к исключению типа System.String. Код является частью универсальной функции, предназначенной для извлечения DataTextField и DataValueField из нетипизированной DataTable и размещения их в списке KeyValuePair (из строки, строки). Я добавил для каждого цикла над запросом linq, чтобы пройти через каждый элемент, и это работало нормально. Данные, возвращаемые для DataValueField, являются числовыми, но находятся в нетипизированном наборе. Я попытался ToString () на полях, не уверен, что еще попробовать дальше. Любая помощь будет оценена.
Private Function GetCurrentBoundControlDT(ByVal StoredProcedure As String, ByVal ParamList As String, ByVal DataTextField As String, ByVal DataValueField As String) As List(Of KeyValuePair(Of String, String))
Dim ds As DataSet = Nothing
Dim dt As DataTable = Nothing
Dim BoundControlDataList As List(Of KeyValuePair(Of String, String)) = Nothing
If ParamList.Trim <> String.Empty Then
StoredProcedure = String.Format("{0} {1}", StoredProcedure, ParamList)
End If
ds = RG.GetDS(StoredProcedure)
If Not ds Is Nothing AndAlso ds.Tables.Count > 0 Then
dt = ds.Tables(0)
'This works fine
For Each r As DataRow In dt.Rows
Dim test1 As String = r(DataTextField)
Dim test2 As String = r(DataValueField)
Dim kv As New KeyValuePair(Of String, String)(test1, test2)
Next
'Blows up here...
BoundControlDataList = (From ThisTable In dt.AsEnumerable() _
Select New KeyValuePair(Of String, String)(ThisTable.Field(Of String)(DataTextField).ToString(), _
ThisTable.Field(Of String)(DataValueField).ToString())).ToList()
End If
Return BoundControlDataList
End Function