Записывать телефоны от контакта в том же запросе LinqToXml?

#linq-to-xml

#linq-to-xml

Вопрос:

У меня есть этот код.

    Dim contact1 As XElement = _
        <contacts>
            <contact>
                <%= From contact In contacts _
                    Select <name><%= contact.Nom %></name> %>
            </contact>
        </contacts>
  

Этот код фактически выбирает контакт

Есть 2 объекта, контакт и телефон. Контакт может содержать список телефонных номеров. Здесь приведены сведения о классе…

 Public Class Contact

    Private m_Name As String
    Public Property Name() As String
        Get
            Return m_Name
        End Get
        Set(ByVal value As String)
            m_Name = value
        End Set
    End Property

    Private m_Phones As List(Of Phone)
    Public Property Phones() As List(Of Phone)
        Get
            Return m_Phones
        End Get
        Set(ByVal value As List(Of Phone))
            m_Phones = value
        End Set
    End Property

End Class

Public Class Phone

    Private m_Contact As Contact
    Public Property Contact() As Contact
        Get
            Return m_Contact
        End Get
        Set(ByVal value As Contact)
            m_Contact = value
        End Set
    End Property

    Private m_Number As String
    Public Property Number() As String
        Get
            Return m_Number
        End Get
        Set(ByVal value As String)
            m_Number = value
        End Set
    End Property

End Class
  

Как мне включить телефоны в этот запрос между <phone type="...">...</phone> для каждого из них?

Бонус ( 1): как также включить тип?

Спасибо.

Комментарии:

1. Возможно, вы захотите опубликовать определения классов имеющихся у вас объектов и некоторые примеры данных. В настоящее время неясно, какие данные у вас есть и какой результат вы хотите.

2. Я добавил определение класса.. однако о данных .. это могут быть любые данные, основанные на этих определениях.

Ответ №1:

Вы четко не описали, какой результат вы хотите или в чем проблема, возможно, следующий пример кода поможет:

 Dim contact1 As New Contact() With {
    .Name = "John Doe",
    .Phones = New List(Of Phone) From {New Phone() With {.Number = "555 12345"}, New Phone() With {.Number = "123 54321"}}
}
Dim contacts As New List(Of Contact)() From {contact1}
Dim contactElements As XElement = _
     <contacts>
         <%= From contact In contacts
             Select <contact>
                        <name><%= contact.Name %></name>
                        <phones>
                            <%= From phone In contact.Phones
                                Select <phone><%= phone.Number %></phone>
                            %>
                        </phones>
                    </contact>
         %>
     </contacts>
  

Результат таков

 <contacts>
  <contact>
    <name>John Doe</name>
    <phones>
      <phone>555 12345</phone>
      <phone>123 54321</phone>
    </phones>
  </contact>
</contacts>
  

Комментарии:

1. Я, хотя и выразился довольно ясно, извиняюсь за путаницу. Результат — это именно то, что вы написали, мне не нужны были какие-то особые результаты, иначе я бы сказал это, хе-хе. Ваш код — это именно то, что мне было нужно. Спасибо.