使用Linq对XDocument进行子集分组

4

我正在寻找一种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查询以从根节点开始并按预期分组。

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接