Linq到XDocument Group的子集

4 c# linq-to-xml

我正在寻找一个linq to Xdoc查询来按XML节点的子集进行分组.我只能使这个工作返回数据的子集但我需要传回的整个xml文档只有特定的节点分组.

<Root>
  <Elementname1>
  </Elementname1>
  <Elementname2>
  </Elementname2>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
</Root>
Run Code Online (Sandbox Code Playgroud)

这段代码:

var result =
        from row in xDoc.Descendants("Elementname3")
        group row by (string)row.Attribute("attrname") into g
        select g.First();
Run Code Online (Sandbox Code Playgroud)

收益:

<Elementname3 attrname="test1">
 <Child></Child>
</Elementname3>
Run Code Online (Sandbox Code Playgroud)

期待:

<Root>
  <Elementname1>
  </Elementname1>
  <Elementname2>
  </Elementname2>
  <Elementname3 attrname="test1">
    <Child>
    </Child>
  </Elementname3>
</Root>
Run Code Online (Sandbox Code Playgroud)

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

dtb*_*dtb 6

试试这个:

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()
    )
);
Run Code Online (Sandbox Code Playgroud)