将空白值分配给DateTime字段

时间:2013-05-02 12:13:33

标签: c# xml

我已经写了一个Linq to Xml查询,从xml创建实体,我在xml中有一个DateTime字段,可能是空白的,我需要将相同的空白分配给实体中的字段,我得到一个错误“字符串未被识别为DateTime”

XDocument xDocument = XDocument.Load(@“c:\ Sample.xml”);

        var _pndList =
               from plist in
                   xDocument.Descendants("HEADER")
               select new PND()
               {
                   DeliveryDate =
                       DateTime.ParseExact(Convert(plist, "DELIVERYDATE"), "yyyyMMdd",
                                           CultureInfo.InvariantCulture, DateTimeStyles.None),
                   LoadClosed =
                       DateTime.ParseExact(Convert(plist, "LOADCLOSEDDATETIME"), "yyyyMMddhhmmss",
                                           CultureInfo.InvariantCulture, DateTimeStyles.None),
                   TrailerId = Convert(plist, "TRAILERID"),
                   TripAndRouteId = Convert(plist, "TRIPROUTEID"),
                   StoreCode = plist.Ancestors("STORE").Attributes().First().Value,
                   Product =
                       (from mlist in
                            plist.Ancestors("STORE").Descendants("RECORD")
                        select new PreNotifiedProduct()
                        {
                            DepotCode = Convert(plist, "DEPOTCODE"),
                            MU = Convert(mlist, "MU"),
                            CaseOrUnitQuantity =
                                System.Convert.ToInt32("0" + Convert(mlist, "NOOFCASES")),
                            OuterCaseHeight =
                                System.Convert.ToInt32("0" +
                                                       Convert(mlist, "OUTERCASEHEIGHT")),
                            OuterCaseLength =
                                System.Convert.ToInt32("0" +
                                                       Convert(mlist, "OUTERCASELENGTH")),
                            OuterCaseWidth =
                                System.Convert.ToInt32("0" + Convert(mlist, "OUTERCASEWIDTH")),
                            ProductCode = Convert(mlist, "TPNB"),
                            UnitsPerCase =
                                System.Convert.ToInt32("0" + Convert(mlist, "UNITSPERCASE")),
                            UseByDate =
                                DateTime.ParseExact(Convert(plist, "LOADCLOSEDDATETIME"),
                                                    "yyyyMMddhhmmss",
                                                    CultureInfo.InvariantCulture,
                                                    DateTimeStyles.None)
                        }).ToList()
               };
    }

在Entity PreNotifiedProduct()中,UseByDate属于DateTime

4 个答案:

答案 0 :(得分:1)

尝试使用Nullable(T) DateTimeDateTime?null代替DateTime.MinValue

如果您使用某种数据库支持的存储,我建议不要使用MinValue,因为您需要确保数据库类型的正确精度,以便它们匹配。

private static DateTime? TryParseDateTime(string dateTime)
{
    DateTime result;
    return DateTime.TryParseExact(dateTime,
                                  "yyyyMMddhhmmss",
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.None,
                                  out result)
           ? result
           : null;
}

用法:

UseByDate = TryParseDateTime(Convert(plist, "LOADCLOSEDDATETIME"))

答案 1 :(得分:0)

DateTime不能为空或为空。您可以使用DateTime.MinValue(默认值)或将其更改为可以为空的DateTime?,然后可以设置为空。

如果字符串可能无法转换为DateTime,您还应该使用DateTime.TryParse。如果空白值是唯一的例外,您可以在尝试解析之前检查它。

答案 2 :(得分:0)

检查日期值是否为空白, 如果它是空白然后不转换它。

您可以使用三元运算符来避免此类错误

答案 3 :(得分:0)

是否可以将UseByDate设置为“DateTime?”的类型?让它可以为空。

然后你可能需要写一些逻辑来测试它是否是一个有效的日期。也许写一个这样的函数。

    static DateTime? TestDate(string date)
    {
        DateTime result;
        if (DateTime.TryParse("", out result))
        {
            return result;
        }
        return null;
    }