C# GroupBy—将项目结果添加到列表中<;T>;
我有一个XML文件: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
<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()
})