0

愉快地阅读 XML

var q2 = from c in xmlDoc.Descendants("Ticket")
         select new
                { Responded_Date = (DateTime)c.Element("Responded_Date") }

但是,当标签是

<Responded_Date xsi:nil="true" />

我得到“字符串未被识别为有效的日期时间”。我不希望使用空合并运算符,而只是将空值插入数据表

4

2 回答 2

1

将 Responded_Date 声明为可为空的日期时间。

var q2 = from c in xmlDoc.Descendants("Ticket")
         select new { Responded_Date = (DateTime?)c.Element("Responded_Date") };

如果<Responded_Date>缺少该元素,将返回一个空值。

如果日期无效,您将收到FormatException -“字符串未被识别为有效日期时间。”。<Responded_Date xsi:nil="true" />将导致 FormatException。

于 2011-03-08T04:13:29.423 回答
0

Linq to XML 本身不支持xsi:nil,另请参阅此msdn 社交链接。作为一种解决方法,您必须做的是手动检查,然后为您的日期分配一些默认值(即DateTime.MaxValue)或使用类投影而不是匿名类型并将 null 分配给可为空的 DateTime?财产。

具有匿名类型(Responded_Date类型DateTime

 select new
          { 
            Responded_Date = c.Element("Responded_Date").Value!="" 
                             ? (DateTime)c.Element("Responded_Date")
                             : DateTime.MaxValue
          }

使用自定义类投影(Responded_Date类型DateTime?):

 select new MyFoo()
          { 
            Responded_Date = c.Element("Responded_Date").Value!="" 
                             ? (DateTime)c.Element("Responded_Date")
                             : null
          }
于 2011-03-08T04:01:55.967 回答