【问题标题】:nhibernate, sql server Datetime compare failingnhibernate,sql server日期时间比较失败
【发布时间】:2012-06-08 09:24:26
【问题描述】:

在 nhibernate 中我使用以下来比较日期

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

在本地环境中它的工作。但在其他环境中它不返回结果。

SubmittedDateTime? is nullable

我是否需要在映射文件中的某处提及可为空。

为此我需要对代码进行任何更改吗?

【问题讨论】:

  • 您还需要比较时间吗?如果没有,请尝试使用 request.Data.SubmittedDateTime.Value.Date。试试看这个帖子:stackoverflow.com/questions/2872444/…
  • SubmittedDateTime 是什么数据类型?使用什么sql类型?
  • SubmittedDateTime 是 C# 可为空的日期时间类型。 SQL 类型为 (Datetime,null)
  • @StefanSteinegger SubmittedDateTime 是 C# 可为空的日期时间类型。 SQL 类型为 (Datetime,null)

标签: sql-server-2005 nhibernate nhibernate-criteria


【解决方案1】:

斯蒂芬,

您的问题可能是(或曾经是)您的生产服务器启用了 ANSI 空值 [1]:http://msdn.microsoft.com/en-us/library/ms188048.aspx。在这种情况下,一个 NULL 值与另一个不同。例如

DECLARE @a INT,
        @b INT

SELECT @a = null, @b=null

IF(@a=@b)
BEGIN
    SELECT 'Equal'
ELSE
    SELECT 'NOT Equal'
END

如果您在 ANSI NULLS ON 的环境中运行以下代码,您会看到“不等于”

也可能是您的日期设置了时间组件;

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

为此,您需要使用 DATEDIFF(D, Date1, Date2)=0。

NHibernate 不支持此功能,因此您需要创建(或查找)自定义 ICriterion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2014-09-11
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多