C# Linq到XDocument按子集分组

C# Linq到XDocument按子集分组,c#,linq-to-xml,C#,Linq To Xml,我正在寻找一个linq到Xdoc查询,以便按照XML节点的子集进行分组。我只能让它返回数据的一个子集,但我需要将整个xml文档传回,只对特定节点进行分组 <Root> <Elementname1> </Elementname1> <Elementname2> </Elementname2> <Elementname3 attrname="test1"> <Child> <

我正在寻找一个linq到Xdoc查询,以便按照XML节点的子集进行分组。我只能让它返回数据的一个子集,但我需要将整个xml文档传回,只对特定节点进行分组

<Root>
  <Elementname1>
  </Elementname1>
  <Elementname2>
  </Elementname2>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
</Root>
返回:

<Elementname3 attrname="test1">
 <Child></Child>
</Elementname3>

期望:

<Root>
  <Elementname1>
  </Elementname1>
  <Elementname2>
  </Elementname2>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
</Root>

我理解,因为后代元素是从elementname3开始的;只是不确定如何按照预期从根节点和组开始解释linq查询。

尝试以下操作:

var result = new XDocument(
    new XElement("Root",
        from x in doc.Root.Elements()
        group x by new { x.Name, Attr = (string)x.Attribute("attrname") } into g
        select g.First()
    )
);
var result = new XDocument(
    new XElement("Root",
        from x in doc.Root.Elements()
        group x by new { x.Name, Attr = (string)x.Attribute("attrname") } into g
        select g.First()
    )
);