2016-05-09 5 views
0

Мне нужно сгруппировать все значения на основе значения дочерних элементов. Ниже приведен пример моего XMLASP.Net VB - Linq to XML group по значению дочернего элемента

<Matchday date="2016-05-09"> 
    <Match id="1288348"> 
     <Home id="13" name="club1"/> 
     <Away id="14" name="club2"/> 
     <Information> 
     <country>England</country> 
     </Information> 
    </Match> 
    <Match id="1288349"> 
     <Home id="15" name="club3"/> 
     <Away id="16" name="club4"/> 
     <Information> 
     <country>England</country> 
     </Information> 
    </Match> 
    <Match id="1288350"> 
     <Home id="17" name="club5"/> 
     <Away id="18" name="club6"/> 
     <Information> 
     <country>Italy</country> 
     </Information> 
    </Match> 
    <Match id="1288351"> 
     <Home id="19" name="club7"/> 
     <Away id="20" name="club8"/> 
     <Information> 
     <country>Spain</country> 
     </Information> 
    </Match> 
</Matchday> 

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

England 
    1288348 
    1288349 

Italy 
    1288350 

Spain 
    1288351 

Как это сделать с помощью VB LINQ к XML-запроса с фоновым кодом.

Благодаря

ответ

3

Это один из возможных способов:

Dim result = data.Elements("Match") _ 
       .GroupBy(Function(x) x.Element("Information").Element("country").Value) 

For Each r As IGrouping(Of String, XElement) In result 
    Console.WriteLine(r.Key) 
    For Each m As XElement In r 
     Console.WriteLine([email protected]) 
    Next 
Next 

где data является XElement объявлен следующим образом:

Dim data As XElement = <Matchday date="2016-05-09"> 
         <Match id="1288348"> 
          <Home id="13" name="club1"/> 
          <Away id="14" name="club2"/> 
          <Information> 
           <country>England</country> 
          </Information> 
         </Match> 
         <Match id="1288349"> 
          <Home id="15" name="club3"/> 
          <Away id="16" name="club4"/> 
          <Information> 
           <country>England</country> 
          </Information> 
         </Match> 
         <Match id="1288350"> 
          <Home id="17" name="club5"/> 
          <Away id="18" name="club6"/> 
          <Information> 
           <country>Italy</country> 
          </Information> 
         </Match> 
         <Match id="1288351"> 
          <Home id="19" name="club7"/> 
          <Away id="20" name="club8"/> 
          <Information> 
           <country>Spain</country> 
          </Information> 
         </Match> 
        </Matchday> 

и вывода состоит в следующем:

England 
1288348 
1288349 
Italy 
1288350 
Spain 
1288351 
+0

Спасибо, вы отлично работаете, но мне пришлось немного исправить ваш запрос. Это рабочий запрос: Dim matchGroup = From mG In xe.Descendants.Elements («Matchday»). Элементы («Match»). GroupBy (Function (x) x.Element («Информация»). Элемент («страна»)) .Value) Выбрать mG – Robert

+0

Что такое 'xe' в вашем коде? Если это «XDocument», используйте 'xe.Root' вместо' xe.Descendants() '. Первый был бы намного более эффективным. – har07

+0

Я забыл об этом, Dim xe As XElement = XElement.Load (Server.MapPath ("exporter.xml")) – Robert

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