2013-10-11 59 views
0

我有一個WCF服務,這應該從一個範圍返回最大日誌日期爲特定的機器,或返回null如果該機器沒有任何日誌條目:什麼是正確的方式返回在C#中的可空日期?

public DateTime? GetLastBootEvent(string laptopName) 
    { 
     ITDashboardDataContext itdb = new ITDashboardDataContext(); 

     DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes 
         where be.machineName.ToUpper() == laptopName.ToUpper() 
         select be.timestamp 
         ).Max(); 

     return latestEvent; 

    } 

然而,當我運行它,我得到出現以下錯誤:

"The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs."

那裏沒有太多的信息。我認爲通過使用DateTime?而不是DateTime這應該允許返回空值?

我可以通過返回過去一些隨機日期的方法來處理這個問題,比如MinDate,但是我想幹淨地這樣做。

+5

你可以打開跟蹤來查看錯誤http://stackoverflow.com/questions/4271517/how-to-turn-on-wcf-tracing代碼看起來不錯,我會做一個瘋狂的猜測,並說收集有沒有元素和最大thorws異常 – wiero

+1

返回可以爲空的DateTime在wcf – Szymon

+0

中完全正常我沒有看到任何理由認爲錯誤與可空類型有關。 –

回答

1

你需要在查詢中投的時間戳可爲空的日期時間即

DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes 
         where be.machineName.ToUpper() == laptopName.ToUpper() 
         select (DateTime?)be.timestamp 
         ).Max(); 
+0

如果時間戳不是DateTime?代碼已經不能編譯了。 –

1

聽起來像你想在這裏使用DefaultIfEmpty例如,

DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes 
         where be.machineName.ToUpper() == laptopName.ToUpper() 
         select be.timestamp 
         ).DefaultIfEmpty(null).Max(); 

如果沒有記錄Max會在沒有記錄的情況下拋出異常。

相關問題