1

我已经编写了一个 Linq to Xml 查询,从 xml 创建实体,我在 xml 中有一个可能为空白的 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()
               };
    }

在实体 PreNotifiedProduct() UseByDate 是 DateTime

4

4 回答 4

1

尝试使用Nullable(T) DateTime,或在无法使用时替换DateTime?nullDateTime.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"))
于 2013-05-02T12:22:08.787 回答
0

是否可以将 UseByDate 设置为“DateTime”类型?使其可以为空。

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

    static DateTime? TestDate(string date)
    {
        DateTime result;
        if (DateTime.TryParse("", out result))
        {
            return result;
        }
        return null;
    }
于 2013-05-02T12:24:06.183 回答
0

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

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

于 2013-05-02T12:17:04.113 回答
0

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

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

于 2013-05-02T12:17:23.907 回答