Linq から XML に頭を悩ませようとしています。次のような XML ドキュメントがあります。
<update>
<comments total="4">
<comment>
<person>
<id>SomeID1</id>
<name>SomeName1</name>
<picture>PictureURL1</picture>
</person>
<message>Comment number 1</message>
</comment>
<comment>
<person>
<id>SomeID2</id>
<name>SomeName2</name>
<picture>PictureURL2</picture>
</person>
<message>Comment number 2</message>
</comment>
<comment>
<person>
<id>SomeID3</id>
<name>SomeName3</name>
<picture>PictureURL3</picture>
</person>
<message>Comment number 3</message>
</comment>
<comment>
<person>
<id>SomeID4</id>
<name>SomeName4</name>
<picture>PictureUR4L</picture>
</person>
<message>Comment number 4</message>
</comment>
</comments>
</update>
私がやりたいことは、最初の 2 つのコメントだけを取得することです。これは私のコードです:
var commentsList = (from comments in doc.Descendants("comments").Take(2)
select comments.Elements("comment"));
ドキュメントに 2 つ以下のコメントがある場合、これは正常に機能しますが、2 つを超えるコメントがある場合、次の例外が発生します。
タイプ「d__11」のオブジェクトをタイプ「System.Xml.Linq.XElement」にキャストできません
何か不足していますか?
編集:foreachループを使用してcommentsListをループしようとすると、例外がスローされることを忘れていました。.ToList() も使用してみましたが、それでも同じ例外が発生します。