当元素是非字符串(如十进制)并且为空时,如何处理?
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()总结
以上是内存溢出为你收集整理的c# – Linq到Xml – 空元素全部内容,希望文章能够帮你解决c# – Linq到Xml – 空元素所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)