2012-06-04 50 views
2

在NHibernate中,我使用以下比較日期NHibernate的,SQL Server日期時間比較失敗

Restrictions.Eq(Projections.Property("SubmittedDate"), request.Data.SubmittedDateTime.Value) 

在本地環境其工作。但在其他環境中它不會返回結果。

SubmittedDateTime? is nullable 

我是否需要在映射文件中提到可空的某處。

在代碼中需要做些什麼改變?

+0

你需要比較還有時間嗎?如果沒有,則嘗試使用request.Data.SubmittedDateTime.Value.Date。嘗試看看這篇文章:http://stackoverflow.com/questions/2872444/round-net-datetime-milliseconds-so-it-can-fit-sql-server-milliseconds –

+0

什麼數據類型有SubmittedDateTime?使用什麼SQL類型? –

+0

SubmittedDateTime是C#可空的日期時間類型。和SQL類型是(Datetime,null) – Techmaster

回答

0

斯蒂芬,

你的問題可能是(或已經)您的生產服務器具有ANSI空值啓用[1]:http://msdn.microsoft.com/en-us/library/ms188048.aspx。在這種情況下,一個NULL值與另一個不同。例如

DECLARE @a INT, 
     @b INT 

SELECT @a = null, @b=null 

IF(@[email protected]) 
BEGIN 
    SELECT 'Equal' 
ELSE 
    SELECT 'NOT Equal' 
END 

如果遇到以下與ANSI NULLS對環境的代碼,你會看到「不等於」

它也可能是您的日期,時間組件集;

2012-09-26 22:16:00.000 <> 2012-09-26

爲此,你將需要使用DATEDIFF(d,日期1,日期2)= 0。

NHibernate不支持這個框,所以你需要創建(或找到)自定義ICriterion