Linq-to-XML: добавление перечислений к объектам - PullRequest
1 голос
/ 02 октября 2010

Я пытаюсь выяснить, как добавить перечисление в объект с помощью Linq.Например:

Dim thingBlock = <Things>
                      <Thing Name="Ish">
                          <SmallThing>Jibber</SmallThing>
                          <SmallThing>Jabber</SmallThing>
                      </Thing>
                      <Thing Name="Ugly Guy">
                         <SmallThing Name="Carl"></SmallThing>
                         <SmallThing Marks="Marks"></SmallThing>
                      </Thing>
                  </Things>
Dim myList As New List(Of Thing)
myList.AddRange(thingBlock.<Thing>.Select(Function(th) New Thing With {.Name = th.@Name}))

Public Class Thing
    Public Property Name As String
    Public Property SmallThings As New List(Of String)
End Class

Это хорошо работает для создания новых Thing и добавления их в myList, но я не могу понять, как добавить IEnumerable of String в мой список SmallThings.Например, это не работает:

myList.AddRange(thingBlock.<Thing>.Select(Function(th) New Thing With {.Name = th.@Name, th.Select(Function(st) .SmallThings.Add(st.Elements.@Name.ToString)}))

Я просто хочу добавить все свойства <SmallThing>.@Name к SmallThings класса Thing.

1 Ответ

3 голосов
/ 02 октября 2010

Я не уверен, какие значения вы хотите извлечь из <SmallThing> s, но, похоже, это работает.

' adds "Jibber" and "Jabber" '
myList.AddRange(thingBlock.<Thing>.Select(Function(th) New Thing With         _
    {                                                                         _
        .Name = th.@Name,                                                     _
        .SmallThings = th...<SmallThing>.Select(Function(st) st.Value).ToList _
    }))

' adds "Carl" '
myList.AddRange(thingBlock.<Thing>.Select(Function(th) New Thing With         _
    {                                                                         _
        .Name = th.@Name,                                                     _
        .SmallThings = th...<SmallThing>.Select(Function(st) st.@Name).ToList _
    }))

Ключом было преобразование проекции в список, поскольку SmallThings ожидал список (Select возвращает IEnumerable(Of T))

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