c# – Linq到Xml – 空元素
发布时间:2020-12-16 01:49:48 所属栏目:百科 来源:网络整理
导读:我正在使用 Linq解析xml文档,但我遇到的情况是我不知道如何处理这个问题.我发现/尝试过的所有东西似乎都不起作用.正如您在下面看到的(非常简单的场景)OrderAmount为空.这是一个十进制字段.当我试图在LINQ中处理它时,它一直在轰炸.我尝试过使用deimcal ?,使用
我正在使用
Linq解析xml文档,但我遇到的情况是我不知道如何处理这个问题.我发现/尝试过的所有东西似乎都不起作用.正如您在下面看到的(非常简单的场景)OrderAmount为空.这是一个十进制字段.当我试图在LINQ中处理它时,它一直在轰炸.我尝试过使用deimcal ?,使用null检查等,似乎没有任何工作(很可能是用户错误).任何建议,将不胜感激.
当元素是非字符串(如十进制)并且为空时,如何处理? XML: <Orders> <Order> <OrderNumber>12345</OrderNumber> <OrderAmount/> </Order> </Orders> LINQ: List<Order> myOrders = from orders in xdoc.Descendants("Order") select new Order{ OrderNumber = (int)orders.Element("OrderNumber"),OrderAmount = (decimal?)orders.Element("OrderAmount"),}.ToList<Order>(); 解决方法
将XElement转换为十进制?仅当元素实际为null时才返回null.
我认为最可读的解决方案是这样的: elem.IsEmpty ? null : (decimal?)elem 如果经常使用它,您可能希望将其放入扩展方法中.或者只是在LINQ查询中使用let来不重复选择元素的代码. from orders in xdoc.Descendants("Order") let amountElem = orders.Element("OrderAmount") select new Order { OrderNumber = (int)orders.Element("OrderNumber"),OrderAmount = amountElem.IsEmpty ? null : (decimal?)amountElem } 如果可以更改XML,另一个选项就是省略要表示null的元素.它应该与您已有的代码一起使用. 编辑:扩展方法看起来像这样: static class XElementExtensions { public static decimal? ToNullableDecimal(this XElement elem) { return elem.IsEmpty ? null : (decimal?)elem; } } 你会像这样使用它: OrderAmount = orders.Element("OrderAmount").ToNullableDecimal() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |