2009-05-28 19 views
2

嗨我已經注意到,如果我使用TimespanObj.ToString()它給我完美的輸出像12:33:00。Timespan LINQ查詢中的字符串問題

但我使用下面的linq查詢。

var time = SomeSimpleQuery.Select(t => new { time = t.FromTime.ToString() }); 

其中FromTime是SQL數據庫中的時間(7)和LINQ-TO-SQL類中的Timespan(默認情況下)。

然後我得到格式爲「jan 1 1900 12:00 PM」的輸出。爲什麼?

回答

4

我懷疑這是因爲查詢的「ToString」部分是在SQL中而不是在.NET中執行的。您應該能夠通過檢查正在執行的SQL來確認這一點。

嘗試直接提取FromTime屬性,然後調用ToString()代替結果。您可以強制處理在使用AsEnumerable,如果你想保留它在所有LINQ查詢.NET方面要執行:

var time = SomeSimpleQuery.Select(t => t.FromTime) 
          .AsEnumerable() 
          .Select(t => new { time = t.ToString() }); 

如果你想獲取其他的事情,只是通過那些通過:

var query = SomeSimpleQuery.Select(row => new { UserId=row.UserId, 
               Query=row.Query, 
               Time=t.FromTime }) 
          .AsEnumerable() 
          .Select(t => new { t.UserId, t.Query, 
               Time=t.FromTime.ToString() }); 
+0

好!我可以在SQL端進行轉換嗎?因爲我也在提取其他信息。不只是時間。 – Vikas 2009-05-28 06:58:26

1

我不記得具有時間跨度類型的SQL。時間只是一天中的小時。

從MSDN(時間數據類型):

定義一天的時間。時間是 沒有時區意識,並且是基於24小時制的 。

+0

我使用MS SQL2008和FromTime是時間類型(7)。然後我使用LINQ-to-SQL類,而FromTime將是Timespan的類型。 – Vikas 2009-05-28 06:46:11