我有一个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
的列表?
答案 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()
})