2010-03-19 2 views
1

HIFaire face à un élément datetime null dans des documents XML en utilisant LINQ

J'ai un exemple de document qui ressemble à

<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> 

Comme vous pouvez le voir, il y a quelques éléments ExpiryDate et RedeemedDate sont vides.

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) 
      { 

      } 

Je ne sais pas comment faire face à la valeur de l'élément nul, j'ai essayé ?? DateTime.MinValue et ?? nul mais les deux me donnent une « chaîne n'a pas été reconnu comme un DateTime valide. » Erreur.

Des suggestions?

Merci

Répondre

4
ExpiryDate = String.IsNullOrEmpty((string)c.Element("ExpiryDate"))? 
    DateTime.MinValue : DateTime.Parse((string)c.Element("ExpiryDate")) 
+1

Vous pouvez également utiliser 'null' au lieu de' DateTime.MinValue' si 'ExpireyDate' est déclaré nullable. – Gabe

+0

Merci! ça a fait l'affaire –

1

"Vous pouvez également utiliser null au lieu de DateTime.MinValue si ExpireyDate est déclarée annulable"

@Gabe, vous ne pouvez pas il suffit d'utiliser null - vous devez utiliser (DateTime?)null parce que le compilateur ne saura pas comment convertir null en DateTime obj ect

Donc, si vous voulez que la valeur soit juste un vide (null) ce serait le code final:

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

En supposant DateTime est une déclarée annulable (DateTime?)

Questions connexes