2013-02-28 3 views
0

У меня есть модель ниже, которую я загружаю в коллекцию IList и запускаю запрос Linq. Проблема заключается в том, что запрос Linq возвращает член OPCServer как IEnumerable (Char). Есть ли причина, по которой это не возвращает базовую строку?Запрос Linq на IList <T> член строки

Если я повторяю сборку с For Each, тогда она возвращает строку, как ожидалось.

Должен ли я вручную преобразовать его назад в качестве показа в разделе рабочего кода?

Модель

Friend Class OpcDataTags 

    Public Property Host As String 
    Public Property HostLive As Boolean 
    Public Property OpcServer As String 
    Public Property OpcChannel As String 
    Public Property PlcDns As String 
    Public Property PlcIP As String 
    Public Property Zone As String 
    Public Property DataBlock As String 
    Public Property StartByte As Int16 
    Public Property ByteSize As Int16 
    Public Property DataType As String 
    Public Property Subscribed As Boolean 
    Public Property Description As String 
    Public Property ArraySize As Nullable(Of Int32) 
    Public Property Abbreviation As String 
    Public Property PlcID As Int32 

End Class 

Коллекция

Friend Property OpcTags As IList(Of OpcDataTags) 

LinqQuery

Dim server = From o In OpcTags.First.OpcServer 

Рабочий код

Dim result = From o In OpcTags.First.OpcServer 
Dim server As String = New String(result.ToArray) 

ответ

3

То, что вы на самом деле хотели добиться был такой:

' From LINQ's point of view, OpcTags is an IEnumerable<OpcDataTags> 
Dim serverQuery = From o In OpcTags Select o.OpcServer 
' And now you've narrowed it down to an IEnumerable<String> 

Dim firstOne = serverQuery.First 
' And now you're selecting the first String from that enumeration of strings 

Пожалуйста, обратите внимание, что это не может бросить исключение должно доходность Перечисление без обязательств.

Если это условие возможно, а также эффект был бы неприятен вы могли бы использовать FirstOrDefault вместо

Dim firstOne_OrNothingIfNone = serverQuery.FirstOrDefault 

Класс Строка реализует IEnumerable<Char> и вы на самом деле заставить его выглядеть как источник более значений (таким образом, неявно отбрасывая его на лучший матч IEnumerable, который был IEnumerable<Char>)

+0

Рад помочь. Пожалуйста, также проверьте более подробное изменение :) –

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