2016-08-03 12 views
1

ich eine XML-Datei haben:GroupBy - Projektergebnis zu einer Liste <T>

<Cars> 
    <Element name="A"> 
     <Car Color="Blue" Id="1"/> 
    </Element> 
    <Element name="B"> 
     <Car Color="Green" Id="2"/> 
      <Car Color="Yellow" Id="3"/> 
    </Element> 
</Cars> 

Und eine Klasse:

public class Car 
{ 
    public string Id { get; set; } 
    public string Color { get; set; } 
} 

ich von name gruppieren möchten und für jedes Ergebnis möchte ich haben Liste der Car s

ich habe versucht:

Doc.Root.Elements("Element") 
     .GroupBy(x => x.Attribute("name").Value).ToList(); 

Aber wie konvertiert man das Ergebnis jeder Gruppe in die Liste Car?

+0

Ich denke, Ihr Hauptproblem ist, dass Ihr XML nicht gültig ist – MikeT

+0

hast du zwei Autos in Element B? –

+0

Ja @AdilMammadov Meine zweite Gruppe muss zwei Listen für das Ergebnis haben –

Antwort

1
var doc = XDocument.Load("your file"); 
var result = doc.Root.DescendantsAndSelf("Element") 
        .Select(element => new 
         { 
          Element = element.Attribute("name").Value, 
          Cars = element.Descendants("Car") 
              .Select(car => new Car 
              { 
               Id = car.Attribute("Id").Value, 
               Color = car.Attribute("Color").Value 
              }).ToList() 
        }).ToList(); 

Wenn Sie in Ihrem Dokument ein paar Mal so etwas wie <Element name="A"> mit seinen Einzelteilen haben, dann können Sie vor den letzten ToList() hinzufügen:

.GroupBy(element => element.Element, 
     (key, group) => new 
      { 
       Element = key, 
       Cars = group.SelectMany(item => item.Cars).ToList() 
      })