Проблема ArrayList в LINQ - PullRequest
       4

Проблема ArrayList в LINQ

2 голосов
/ 08 августа 2010

У меня проблема с запросом LINQ. Выше я получил ошибку system.object, которую нельзя преобразовать в Sytem.String.В чем может быть проблема?

, если я использую string () вместо ArrayList, это не вызывает ошибку.Но в String () я должен добавить элементы вручную

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

Ответы [ 3 ]

3 голосов
/ 08 августа 2010

Как правило, никогда не используйте ArrayList или другие типы в System.Collections.Эти типы не рекомендуются в пользу их общих эквивалентов (если они есть) в пространстве имен System.Collections.Generic.Эквивалент ArrayList оказывается List(Of T).

Во-вторых, возврат массива из метода обычно считается плохой практикой - хотя даже методы из фреймворка делают это (но теперь это широко считается ошибкой).Вместо этого верните либо IEnumerable(Of T), либо IList(Of T), то есть используйте интерфейс вместо конкретного типа.

2 голосов
/ 08 августа 2010

Вы можете использовать List(Of String) вместо ArrayList.

0 голосов
/ 08 августа 2010

Добавьте ссылку на System.Data.DataSetExtensions и выполните:

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

(извините, но это синтаксис C #, перепишите в VB.NET, как вам нужно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...