C# 具有相同属性的嵌套元素上的LinQ GroupBy

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

我有以下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="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
是不需要的——这是隐含的。)


现场示例:

这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。这正是康拉德第一次回复的内容。非常感谢你的回答。谢谢你的回答。谢谢你的回答。谢谢你的回答。谢谢你的回答。