C# 具有相同属性的嵌套元素上的LinQ GroupBy
我有以下xml输出:C# 具有相同属性的嵌套元素上的LinQ GroupBy,c#,linq,lambda,C#,Linq,Lambda,我有以下xml输出: <R N="1"> <MT N="Section" V="Section-1" /> <MT N="Person" V="John" /> </R> <R N="2"> <MT N="Section" V="Section-1" /> <MT N="Person" V="Peter" /> </R> <R N="3"> <MT N="Sect
<R N="1">
<MT N="Section" V="Section-1" />
<MT N="Person" V="John" />
</R>
<R N="2">
<MT N="Section" V="Section-1" />
<MT N="Person" V="Peter" />
</R>
<R N="3">
<MT N="Section" V="Section-2" />
<MT N="Person" V="Joseph" />
</R>
。。。
我正在尝试编写一个LinQ查询,以按节对所有结果进行分组,使用节值作为键,使用整个元素作为元素选择器:
//MyElements its an IEnumerable<XElement>
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.Where
(
type => type.Attribute("N").Value == "Section"
)
.Select
(
type => type.Attribute("V").Value
)
,
x=>x
);
//MyElements是一个IEnumerable
var something=MyElements.GroupBy
(
x=>x.元素(“MT”)
哪里
(
type=>type.Attribute(“N”).Value==“节”
)
.选择
(
type=>type.Attribute(“V”).Value
)
,
x=>x
);
调试something变量时,该变量不包含元素
有什么建议吗
提前谢谢
Jose键选择的结果是
IEnumerable
,这绝对是错误的。它应该留给您一个简单的字符串
,可以通过
x => x.Elements("MT").Single(t => t.Attribute("N").Value == "Section")
.Attribute("V").Value
您也不需要标识投影x=>x
,正如它所暗示的那样
最后,如果
MyElements
本身非空,则给定的代码决不会导致某物成为空的可枚举项。键选择的结果是IEnumerable
,这肯定是错误的。它应该留给您一个简单的字符串
,可以通过
x => x.Elements("MT").Single(t => t.Attribute("N").Value == "Section")
.Attribute("V").Value
您也不需要标识投影x=>x
,正如它所暗示的那样
最后,如果MyElements
本身非空,则给定的代码决不会导致某物成为空的可枚举项。键选择的结果是IEnumerable
,这肯定是错误的。它应该留给您一个简单的字符串
,可以通过
x => x.Elements("MT").Single(t => t.Attribute("N").Value == "Section")
.Attribute("V").Value
您也不需要标识投影x=>x
,正如它所暗示的那样
最后,如果MyElements
本身非空,则给定的代码决不会导致某物成为空的可枚举项。键选择的结果是IEnumerable
,这肯定是错误的。它应该留给您一个简单的字符串
,可以通过
x => x.Elements("MT").Single(t => t.Attribute("N").Value == "Section")
.Attribute("V").Value
您也不需要标识投影x=>x
,正如它所暗示的那样
最后,如果MyElements
本身非空,则给定的代码决不会导致某物成为空的可枚举项。如果我正确理解您的要求,它将是:
var res = doc.Descendants("MT")
.Where(x => x.Attribute("N").Value == "Section")
.GroupBy(x => x.Attribute("V").Value,
(k, v) => new { Key = k, List = v.Select(x => x.Parent).ToList() })
.ToList();
结果:
如果我正确理解您的要求,它将是:
var res = doc.Descendants("MT")
.Where(x => x.Attribute("N").Value == "Section")
.GroupBy(x => x.Attribute("V").Value,
(k, v) => new { Key = k, List = v.Select(x => x.Parent).ToList() })
.ToList();
结果:
如果我正确理解您的要求,它将是:
var res = doc.Descendants("MT")
.Where(x => x.Attribute("N").Value == "Section")
.GroupBy(x => x.Attribute("V").Value,
(k, v) => new { Key = k, List = v.Select(x => x.Parent).ToList() })
.ToList();
结果:
如果我正确理解您的要求,它将是:
var res = doc.Descendants("MT")
.Where(x => x.Attribute("N").Value == "Section")
.GroupBy(x => x.Attribute("V").Value,
(k, v) => new { Key = k, List = v.Select(x => x.Parent).ToList() })
.ToList();
结果:
我认为你所追求的更像是:
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.First
(
type => type.Attribute("N").Value == "Section"
)
.Attribute("V").Value
,
x=>x
);
(尽管最后一个x=>x
是不需要的——这是隐含的。)
活生生的例子:我认为你追求的更像是:
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.First
(
type => type.Attribute("N").Value == "Section"
)
.Attribute("V").Value
,
x=>x
);
(尽管最后一个x=>x
是不需要的——这是隐含的。)
活生生的例子:我认为你追求的更像是:
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.First
(
type => type.Attribute("N").Value == "Section"
)
.Attribute("V").Value
,
x=>x
);
(尽管最后一个x=>x
是不需要的——这是隐含的。)
活生生的例子:我认为你追求的更像是:
var something = MyElements.GroupBy
(
x => x.Elements("MT")
.First
(
type => type.Attribute("N").Value == "Section"
)
.Attribute("V").Value
,
x=>x
);
(尽管最后一个x=>x
是不需要的——这是隐含的。)
现场示例:这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。谢谢你的回答。谢谢你的回答。谢谢你的回答。谢谢你的回答。