使用linq处理xml中的null datetime元素

时间:2010-03-19 05:25:05

标签: linq linq-to-xml

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

            }

我不知道如何处理null元素值, 我试过?? DateTime.MinValue和?? null然而两个都给了我一个“ 字符串未被识别为有效的DateTime。“错误。

有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

  

如果ExpireyDate是,你也可以使用null而不是DateTime.MinValue   声明可以为空的

@Gabe,你不能只使用null - 你需要使用(DateTime?)null因为编译器不知道如何将null转换为DateTime个对象

因此,如果您希望该值只是一个空白(null),那么这将是最终代码:

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

假设DateTime被声明为可空(DateTime?