2010-08-08 3 views
2

J'ai un problème LINQ query.In ci-dessus, j'ai eu erreur system.object ne peut pas être converti en Sytem.String. Quel peut être le problème? Si j'utilise string() à la place de ArrayList, cela ne déclenche pas d'erreur. Mais dans la chaîne(), j'ajouter des éléments manuellementProblème ArrayList dans LINQ

Public Shared Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer, ByVal contextKey As String) As String() 
    Dim movies As New ArrayList() 
     Dim dt As DataTable = StaticData.Get_Data(StaticData.Tables.LU_TAG) 
     For Each row As DataRow In dt.Rows 
      movies.Add(row.Item("DS_TAG")) 
     Next 
    Return (From m In movies _ 
      Where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) _ 
      Select m).Take(count).ToArray() 
End Function 

Répondre

2

Vous pouvez utiliser List(Of String) au lieu de ArrayList.

+0

merci, je l'ai essayé après posté ici :) ça marche.thanks – ceee

0

Ajouter une référence à System.Data.DataSetExtensions et à faire:

return dt 
    .AsEnumerable() // sic! 
    .Select(r => r.Item("DS_TAG")) // DataTable becomes IEnumrable<DataRow> 
    .Where(m => m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 

(désolé mais c'est C syntaxe #, réécrire à VB.NET que vous avez besoin)

3

En règle générale, ne jamais utilisation ArrayList ou l'un des autres types dans System.Collections. Ces types sont dépréciés en faveur de leurs équivalents génériques (si disponibles) dans l'espace de noms System.Collections.Generic. L'équivalent de ArrayList s'avère être List(Of T). Deuxièmement, le retour d'un tableau d'une méthode est généralement considéré comme une mauvaise pratique - bien que même les méthodes du framework le fassent (mais cela est maintenant largement considéré comme une erreur). Au lieu de cela, renvoyez IEnumerable(Of T) ou IList(Of T), c'est-à-dire: utilisez une interface au lieu d'un type concret.