缺少节点会导致 null 异常崩溃 linq to xml
我收到一个 null 异常,因为 MYTAG1 不存在。我知道这是因为 Element("MYTAG1") 为空并且在其上调用 Elements("MYTAG2") 不起作用。
我该如何处理这个问题以防止崩溃?
var myItems = from myNode in Nodes.Element("MYTAG1").Elements("MYTAG2")
select new EPTableItem
{
// Assign stuff here
};
I get a null exception on this because MYTAG1 doesn't exist. I understand that this is because Element("MYTAG1") is null and calling Elements("MYTAG2") on it wont work.
How do I deal with this to prevent the crash?
var myItems = from myNode in Nodes.Element("MYTAG1").Elements("MYTAG2")
select new EPTableItem
{
// Assign stuff here
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我想不出一种巧妙的方法将
if
语句合并到 C# 查询语法中,因此我将提出以下解决方案,在执行查询之前检查所需的节点。I can't think of a clever way to incorporate an
if
statement into the C# query syntax, so I'll propose the following solution which checks for the required node before executing the query.一种选择是定义一个新的扩展方法并将其用作查询源。
One option is to define a new extension method and use that as your query source.
我发现当您使用扩展方法而不是伪 sql 语法时,Linq 会容易得多。您应该能够按照这些思路做一些事情,但请记住我尚未测试代码。
I find that Linq is a lot easier when you use the extension methods instead of the pseudo sql syntax. You should be able to do something along these lines, but bare in mind that I have not tested the code.
如果你想在 LINQ 中执行此操作,类似这样的操作应该可以工作:
当然,如果 MYTAG 出现更多次,则工作方式会有所不同
If you want to do it in LINQ something like this should work:
of course this will work differently if there's more occurrences of MYTAG
您可以使用单独的 from 子句和 where 子句在单个 LINQ 查询中完成这一切。
You can do it all in a single LINQ query with separate from clauses and a where clause.