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
的列表呢?
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()
})