在可空的日期时间查询NHibernate

时间:2012-10-18 18:47:11

标签: nhibernate nullable

我有一段时间从我的内存sqlite db中返回几行来模拟oracle db。我正在编写一个NHibernate查询来通过可空的DateTime来提取行。我想我已经正确映射了它。看看:

数据对象属性:

public virtual System.Nullable<System.DateTime> RequiredInstallDt { get; set; }

映射:

Map(x => x.RequiredInstallDt).Column("REQUIRED_INSTALL_DT").Nullable();

db中有两行。一个应该拉起来,一个不应该。我要求的日期是 2012-8-1 。没有时间价值,数据库中没有一个,我已经能够验证。一行有8月1日,另一行没有。我期待一条记录回归。

如果我说:

IList<Request> ra = new RequestDAO().ListAll();

这是与我的查询在同一个调用中的已知工作方法,我按预期获得了两个记录。

我使用linq,hql和CreateCriteria版本尝试了同一查询的多个版本。结果几乎总是一样的。我得到0条记录(另一种方式是NHibernate.Hql.Ast.ANTLR.QuerySyntaxException,这是一个PEBKAC)。以下是其中一个查询版本:

        DateTime installDate = new DateTime(2012, 8, 1);
        var requests = session.CreateCriteria<Request>()
            .Add(Restrictions.Ge("RequiredInstallDt", installDate))
            .Add(Restrictions.Lt("RequiredInstallDt", installDate.AddDays(1)))
            .List<Request>();

感谢阅读..我感谢任何意见。

1 个答案:

答案 0 :(得分:0)

尝试添加not null限制。您的查询可能是

DateTime installDate = new DateTime(2012, 8, 1);
var requests = session.CreateCriteria<Request>()
        .Add(Restrictions.Ge("RequiredInstallDt", installDate))
        .Add(Restrictions.Lt("RequiredInstallDt", installDate.AddDays(1)))
        .Add(Restriction.IsNotNull("RequiredInstallDt"))
        .List<Request>();