2014-09-21 2 views
0

У меня есть некоторые XML в виде:Выбор дочерний узел XElement с LINQ Group By

<Test> 
    <Parent Value1="1" Value2="2"> 
    <Child value3="x"/> 
    </Parent> 
    <Parent Value1="1" Value2="2"> 
    <Child value3="y"/> 
    </Parent> 
    <Parent Value1="a" Value2="b"> 
    <Child value3="z"/> 
    </Parent> 
</Test> 

Я пытаюсь использовать xelements и LINQ для группы дочерних узлов под родительскими узлами, которые имеют одинаковые значения атрибутов. Например .:

<Test> 
    <Parent Value1="1" Value2="2"> 
    <Child value3="x"/> 
    <Child value3="y"/> 
    </Parent> 
    <Parent Value1="a" Value2="b"> 
    <Child value3="z"/> 
    </Parent> 
</Test> 

На сегодняшний день, это то, что у меня есть:

Dim l_xeXML As XElement = <Test> 
            <Parent Value1="1" Value2="2"> 
             <Child value3=""/> 
            </Parent> 
            <Parent Value1="1" Value2="2"> 
             <Child value3=""/> 
            </Parent> 
            <Parent Value1="a" Value2="b"> 
             <Child value3=""/> 
            </Parent> 
           </Test> 

    Dim l_xeGROUPED As XElement = <Test> 
             <%= From l_xeExample As XElement In l_xeXML...<Parent> 
              Group l_xeExample By Key = New With {Key [email protected], Key [email protected]} Into Group 
              Select l_GROUPED = New With {.Value1 = Key.Value1, .Value2 = Key.Value2} 
              Select <Parent Value1=<%= l_GROUPED.Value1 %> Value2=<%= l_GROUPED.Value2 %>> 
                <!-- Can't work out what to put here --> 
               </Parent> %> 

            </Test> 

    Debug.Print(l_xeGROUPED.ToString) 

На линии <!-- Can't work out what to put here -->, я попытался положить <%= l_xeExample.<Child> %> однако я получаю сообщение об ошибке, что l_xeExample не находится в пределах области.

Может ли кто-нибудь помочь?

Заранее спасибо

ответ

1

Это даст желаемый результат:

....... 
....... 
Dim l_xeGROUPED As XElement = 
    <Test> 
      <%= From l_xeExample As XElement In l_xeXML...<Parent> 
       Group l_xeExample By Key = New With {Key [email protected], Key [email protected]} 
       Into Parent = Group 
       Select <Parent Value1=<%= Key.Value1 %> Value2=<%= Key.Value2 %>> 
         <%= From g As XElement In Parent.<Child> 
          Select g 
         %> 
        </Parent> %> 
     </Test> 
Debug.Print(l_xeGROUPED.ToString) 
+0

@stormCloud Любая проблема с этим подходом? – har07

+0

Извините - не было, спасибо за подход, он отлично работает. Ответ принят и поддержан :) – stormCloud

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

  • Нет связанных вопросов^_^