2012-01-06 5 views
4

XMLノードのサブセットでグループ化するためのlinq to Xdocクエリを探しています。私はこの作業でデータのサブセットを返すことしかできませんでしたが、XML文書全体を、特定のノードのみをグループ化して戻す必要があります。Linq to XDocumentサブセット別

<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クエリを解説する方法についてはわかりません。

答えて

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