GroupBy - 项目结果到列表<t>

时间:2016-08-03 10:17:56

标签: c# linq group-by

我有一个XML文件:

<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>

一节课:

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

我想按name进行分组,对于每个结果,我想要一个Car的列表

我试过了:

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

但是如何将每个组的结果转换为Car的列表?

1 个答案:

答案 0 :(得分: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();

如果您的文档中有一些像<Element name="A">这样的项目,那么您可以在最后ToList()之前添加:

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