GroupBy-将结果投影到列表<;T>;

本文关键字:lt gt 列表 结果 投影 GroupBy- | 更新日期: 2023-09-27 18:00:03

我有一个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的列表呢?

GroupBy-将结果投影到列表<;T>;

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() 
             })