2013-05-02 95 views
1

我已經寫了一個Linq到Xml查詢,從xml創建實體,我在xml中有一個DateTime字段,它可能是空白的,我需要將相同的空白分配給字段在實體中,我收到錯誤「String not recognized as 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() 
       }; 
    } 

在實體PreNotifiedProduct()UseByDate是日期時間

+1

我想你將不得不檢查元素是否爲空,如果爲空,則可能將其設置爲'DateTime.MinValue'(表兄弟姐妹'DateTime'沒有什麼空白,最接近的是使其成爲可空類型並依賴null作爲空值) – V4Vendetta 2013-05-02 12:18:24

回答

0

是否可以設置UseByDate類型的使其可以爲空。

然後,您可能需要編寫一些邏輯來測試它是否是有效的日期。也許寫一個像這樣的函數。

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

DateTime不能爲空或無效。您可以使用DateTime.MinValue(默認值)或將其更改爲DateTime?,該值可以爲空,然後可以設置爲空。

如果存在字符串不可轉換爲DateTime的可能性,則還應該使用DateTime.TryParse。如果空值是唯一的例外,那麼在嘗試解析它之前可以檢查它。

0

檢查日期值是否爲空, 如果是空白則不轉換。

您可以使用三元運算符,以避免此類錯誤

1

嘗試使用Nullable(T)DateTimeDateTime?DateTime.MinValue替代null當你不能。

如果您使用的是某種支持數據庫的存儲,我建議不要使用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"))