2011-12-24 40 views
1
比較兩個日期

我想比較兩個日期是在兩種不同的格式:LINQ to SQL的 - 在兩種不同的格式

 var messages = (from m in db.ChatMessages 
         where m.RoomID == roomID && 
         m.MessageID > messageID && 
         m.MessageTime > timeUserJoined.AddSeconds(1) 
         orderby m.MessageTime ascending 
         select new { m.MessageID, m.Text, m.User.username, m.MessageTime, m.Color }); 

我的問題是,我的數據庫表的存儲日期時間字段在美國格式即12/24/2011 1:35:11 PM。因此,在上面的查詢,線m.MessageTime> timeUserJoined.AddSeconds(1)可能是2011年12月24日下午1時35分11秒> 24/12/2011 13時35分11秒下午

如何我是否可以解決這個問題 - 比較兩種不同格式的兩種日期,以及最佳做法是什麼?

在這種情況下,我沒有收到任何記錄,我想是因爲這些比較問題?

很多感謝:)

+2

我懷疑'DateTime'的格式與你的問題有什麼關係。使用[Linq2Sql visualizer](http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx)來獲取SQL查詢,並查看它是否看起來像你期望的SQL。 – dasblinkenlight

回答

2

你說他們是日期時間字段...然後好消息; .NET中的DateTime和TSQL 沒有任何格式 - 它只是一個數字。您看到的任何特定格式都只存在於您的IDE或其他工具(SSMS等)的想象中。

只要是DateTime,你就不會在這裏遇到問題。

+1

沒錯。事實上,在Linq to SQL中,這會被轉換爲SQL查詢。無論您的應用程序中的特定演示文稿格式如何,SQL都會使用其原生格式和操作對這些進行比較。 – GalacticCowboy

0

首先,我相信你應該使用DateTime.CompareTo()來比較你的時間戳。

其次,你是如何使用消息收集的?你知道它是一個匿名的非類型對象的集合嗎?

(我會評論,但我沒有代表)

+1

我不同意CompareTo:'>'很好,而且可讀性更高。 –

+0

匿名!=無類型。 –

+0

是的,我編輯過,以反映這一點。 – Immersive