按子集Linq到XDocument Group

本文关键字:XDocument Group Linq 子集 | 更新日期: 2023-09-27 18:19:49

我正在寻找一个linq到Xdoc的查询,以便按XML节点的子集进行分组。我只能通过返回数据的子集来完成这项工作,但我需要整个xml文档只返回分组的特定节点。

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

此代码:

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

退货:

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

预期:

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

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

按子集Linq到XDocument Group

试试这个:

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()
    )
);