【问题标题】:Querying NHibernate on a nullable datetime在可为空的日期时间查询 NHibernate
【发布时间】:2012-10-09 07:45:41
【问题描述】:

我从我的内存中的 sqlite 数据库中返回几行来模拟 oracle 数据库,这实在是太难了。我正在编写一个 NHibernate 查询以通过可为空的 DateTime 提取行。我想我已经正确映射了它。看看:

数据对象属性:

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

映射:

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

数据库中有两行。一个应该拉起来,一个不应该拉起来。我要的日期是 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>();

感谢您的阅读。感谢您的意见。

【问题讨论】:

    标签: nhibernate nullable


    【解决方案1】:

    尝试添加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>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多