2010-08-08 5 views
2

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

Если я использую 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 

ответ

2

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

+0

спасибо, я попробовал его после размещения здесь :) it works.thanks – ceee

0

Добавить ссылку на 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, как вам нужно)

3

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

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

Смежные вопросы