如何忽略具有LINQ where子句的特定?

Isa*_*son 5 c# linq

我有一个客户端发送一个xml feed我使用以下代码解析.这段代码有效.

reviews = from item in xmlDoc.Descendants("node")
                          select new ForewordReview()
                          {
                              PubDate = (string)item.Element("created"),
                              Isbn = (string)item.Element("isbn"),
                              Summary = (string)item.Element("review")
                          };
Run Code Online (Sandbox Code Playgroud)

获得所有"评论"后,我将IEnumerable转换为List并将其返回.最初,我有一个很好的,很容易解析他们的XML,这看起来像这样:

<reviews>
    <node>
        <created>01-01-1900</created>
        <ISBN>12345657890123</ISBN>
        <Review>This is a nice and silly book</Review>
    </node>
    <node>
        <created>01-01-2011</created>
        <ISBN>1236245234554</ISBN>
        <Review>This is a stupid book</Review>
    </node>
    <node>
        <created>12-06-1942</created>
        <ISBN>1234543234577</ISBN>
        <Review>This is a old, naughty book</Review>
    </node>
</reviews>
Run Code Online (Sandbox Code Playgroud)

然而,他们已经改变了我们无法访问的模式,现在他们的XML在最终<node>标签中添加了一个不包含我正在寻找的死神元素的结尾,所以,我的解析就打破了这最后一个标签,我抛出一个异常.这是一个例子:

<reviews>
    <node>
        <created>01-01-1900</created>
        <ISBN>12345657890123</ISBN>
        <Review>This is a nice and silly book</Review>
    </node>
    <node>
        <created>01-01-2011</created>
        <ISBN>1236245234554</ISBN>
        <Review>This is a stupid book</Review>
    </node>
    <node>
        <created>12-06-1942</created>
        <ISBN>1234543234577</ISBN>
        <Review>This is a old, naughty book</Review>
    </node>
    <node>
        <count>4656</count>
    </node>
</reviews>
Run Code Online (Sandbox Code Playgroud)

我需要知道是否有一种方法可以忽略这个最终标记(它总是在文档的末尾),即使它与我正在寻找的所有其他"节点"标记具有相同的名称.我确实尝试了解这段代码,但如果它看到这个错误,它就不会返回好的评论列表.

多谢你们.

del*_*ree 1

添加空值检查

PubDate = (string)(item.Element("created") ?? ""),
Isbn = (string)(item.Element("isbn") ?? ""),
Summary = (string)(item.Element("review") ?? "")
Run Code Online (Sandbox Code Playgroud)

始终为您所做的一切添加空检查。只是好的做法。在这种情况下,它将消除此错误,但稍后可能会在程序中出现错误,您假设这些字符串不为空,因此稍后也请确保并进行空检查。