Linq to XML使用Take()获取前两个元素

时间:2012-08-30 23:46:27

标签: c# linq-to-xml

我正试图将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>

我想要做的只是前两个评论。这是我的代码:

var commentsList = (from comments in doc.Descendants("comments").Take(2)
                   select comments.Elements("comment"));

如果文档有两个或更少的注释,这可以正常工作,但是当有两个以上的注释时,我会得到以下异常:

  

无法将'd__11'类型的对象强制转换为'System.Xml.Linq.XElement

我错过了什么吗?

编辑:我忘了提到当我尝试使用foreach循环遍历commentsList时抛出异常。我尝试使用.ToList(),但仍然得到相同的异常。

2 个答案:

答案 0 :(得分:2)

您可以直接跳到评论元素。

var commentsList = doc.Descendants("comment").Take(2);

答案 1 :(得分:0)

试试这个:

var commentsList = from comments in doc.Descendants("comments")
                   select comments.Elements("comment").Take(2);