Работа с нулевым элементом datetime в xml с использованием linq - PullRequest
1 голос
/ 19 марта 2010

HI

У меня есть пример документа, который выглядит как

<ItemEntry>
<PurchaseDate>2010-03-18T20:36:32.81108+13:00</PurchaseDate>
<StoreGUID>0a0324ad-5f99-486a-a2d0-870bc6991e9f</StoreGUID>
<ExpiryDate />
<CardID>111111</CardID>
<PurchaseAmount>0</PurchaseAmount>
<RedeemedAmount />
<EntryType>1</EntryType>
<RedeemedDate />
<SalesAssistantID>0</SalesAssistantID>
</ItemEntry>

Как видите, есть несколько элементов ExpiryDate и RedeemedDate, которые пусты.

  var q = from c in xml.Elements("ItemEntry")
                    select new mdDetail {
                        PurchaseDate = (DateTime)c.Element("PurchaseDate"),
                        StoreGUID = (Guid)c.Element("StoreGUID"),
                        ExpiryDate = (DateTime?)c.Element("ExpiryDate")??DateTime.MinValue,
                        CardID = (int)c.Element("CardID"),
                        PurchaseAmount = (double)c.Element("PurchaseAmount"),
                         RedeemedAmount = (double?)c.Element("RedeemedAmount"),
                        EntryType = (int)c.Element("EntryType"),
                        RedeemedDate = (DateTime?)c.Element("RedeemedDate") ??DateTime.MinValue,
                        SalesAssistantID = (int)c.Element("SalesAssistantID"),



                    }                      
                    ;
            foreach (var item in q)
            {

            }

Я не уверен, как обращаться со значением нулевого элемента, Я пробовал ?? DateTime.MinValue и ?? null, однако оба дают мне " Строка не была распознана как допустимая дата / время. "Ошибка.

Есть предложения?

Спасибо

Ответы [ 2 ]

4 голосов
/ 19 марта 2010
ExpiryDate = String.IsNullOrEmpty((string)c.Element("ExpiryDate"))? 
    DateTime.MinValue : DateTime.Parse((string)c.Element("ExpiryDate"))
1 голос
/ 16 октября 2012

" Вы также можете использовать null вместо DateTime.MinValue, если ExpireyDate имеет значение объявлен обнуляемым"

@ Гейб, вы не можете просто использовать null - вам нужно использовать (DateTime?)null, потому что компилятор не будет знать, как преобразовать null в DateTime объект

Так что, если вы хотите, чтобы значение было пустым (нулевым), это был бы окончательный код:

ExpiryDate = String.IsNullOrEmpty(c.Element("ExpiryDate").Value)? 
    (DateTime?)null : DateTime.Parse(c.Element("ExpiryDate").Value)

Предполагая, что DateTime объявлен как обнуляемый (DateTime?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...