Приведение от XElement
к decimal?
возвращает null
только тогда, когда элемент действительно null
.
Я думаю, что наиболее читаемое решение выглядит примерно так:
elem.IsEmpty ? null : (decimal?)elem
Возможно, вы захотите поместить это в метод расширения, если вы используете его часто. Или просто используйте let
в своем запросе LINQ, чтобы не повторять код, который выбирает элемент.
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()