C# GroupBy—将项目结果添加到列表中<;T>;

C# GroupBy—将项目结果添加到列表中<;T>;,c#,linq,group-by,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&g

我有一个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>
我想按
name
进行分组,对于每个结果,我想有一个
Car
s的列表

我试过:

Doc.Root.Elements("Element")
        .GroupBy(x => x.Attribute("name").Value).ToList();
但是如何将每组的结果转换为
汽车的列表

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();
如果您的文档中有几次类似于
的项目,那么您可以在最后一次
列表()之前添加:


我认为您的主要问题是您的XML无效。您在元素B中有两辆车吗?是的@AdilMammadov我的第二组必须有两个列表才能得到结果
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();
.GroupBy(element => element.Element, 
         (key, group) => new 
             { 
                 Element = key, 
                 Cars = group.SelectMany(item => item.Cars).ToList() 
             })