Linq для XDocument Group по подмножеству - PullRequest
4 голосов
/ 07 января 2012

Я ищу запрос linq to 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 голосов
/ 07 января 2012

Попробуйте это:

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()
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...