2013-07-29 38 views
2

給定一個表元素有日期時間字段的生日(NOT NULL),在實體框架4允許我做:實體框架:可爲空的DateTime的toString(格式)在vb.net處理

Dim mylist = (From el in Element Select el).ToList() 
    .Select(function(el) new with { 
      .bday = el.birthday.toString("dd/MM/yy") 
      } 

我現在需要將生日更改爲可空,因此我更改了SQL Server中的表格,然後在Visual Studio中更新了我的ModelDB。 結果是行:‘) 得到它的唯一方法‘

  .bday = el.birthday.toString("dd/MM/yy") 

引發一個例外是「從整數無效澆鑄到字符串’DD/MM/YY固定’是改變線這種方式:

  .bday = CDate(el.birthday).toString("dd/MM/yy") 

這是正確的做法 現在,我有一個爲空的日期時間,如何處理這種情況時el.birthday爲空

感謝

?!

回答

2

如果做一個小實驗,你會完全理解發生了什麼:

Dim normalDate As Date = Now 
Dim nullableDate As Nullable(Of Date) = normalDate 

Dim normalToText As String = normalDate.ToString("dd/MM/yy") 'Works perfectly 

Dim nullableToText As String = nullableDate.ToString("dd/MM/yy") 'Error 

在這兩個變量的內容,normalDatenullableDate,是相同的,但它們不是:在ToString("date in certain format")功能需要一個Date類型輸入;你發送的是日期類型的修改版本(不是太不同,但不一樣)。用CDate你正在做的是將Date的修改版本轉換成一個實際有效的Date類型,因此ToString()功能沒有任何問題。

你做得對嗎?是的,就CDate可以處理「空值」(CDate(Nothing)不輸出任何錯誤)而言:您正在將給定變量調整爲ToString()所期望的值。

注意:我已經檢查了上述代碼輸出的確切錯誤,它有效地提供了「從字符串」dd/MM/yy「轉換爲鍵入」整數「無效。因此,當您打算將ToString(「date」)與Nullable Date一起使用時,您得到的錯誤是標準錯誤;不是太具描述性的錯誤,這是真的。

+0

其實我無法理解爲什麼錯誤與Integer有關,因爲在DB中字段是Datetime(永遠不會改變這個)。無論如何,當在el.birthday null元素上調用CDate(el.birthday)時,我得到一個錯誤,但是我會寫幾行代碼來解決這個問題。 – Desmond

+0

@Desmond我現在更新了我的答案:如果你放一個嘗試......抓住周圍Dim nullableToText As String = nullableDate.ToString(「dd/MM/yy」),你會發現你得到的錯誤是你所報告的錯誤。這個錯誤不是太具有描述性,但是在使用可空日期的方法時是標準錯誤,因此輸入數據沒有任何問題。 – varocarbas