nHibernate 3-带日期时间的查询版本

nHibernate 3-带日期时间的查询版本,nhibernate,nhibernate-3,Nhibernate,Nhibernate 3,我正在尝试使用DateTime编写一个要选择的查询。年份作为where参数,但我从nunit收到此错误: NHibernate.QueryException:无法解析属性:Register.Year of:Estudantino.Domain.Events 在类Events中,我有一个名为Register的属性作为日期时间类型 public virtual DateTime Registada { get; set; } 这是返回错误的方法: using (ISession session

我正在尝试使用DateTime编写一个要选择的查询。年份作为where参数,但我从nunit收到此错误:

NHibernate.QueryException:无法解析属性:Register.Year of:Estudantino.Domain.Events

在类Events中,我有一个名为Register的属性作为日期时间类型

public virtual DateTime Registada { get; set; }
这是返回错误的方法:

  using (ISession session = NHibernateHelper.OpenSession())
        {
            return session.QueryOver<Evento>()
                .Where(x => x.Register.Year == year)
                .List();
        }
使用(ISession session=NHibernateHelper.OpenSession())
{
return session.QueryOver()
.其中(x=>x.Register.Year==Year)
.List();
}
变量年份的类型为int,已传递给方法


有人知道我做错了什么吗?我的数据库服务器是SQL server 2005 Express。

您可能需要在此处使用HQL。基本上,NHibernate不知道如何处理
year
。我怀疑您需要使用
RegisterFunction
来注册
年份
功能

请通读这篇文章,以充分理解你想做什么

  • 在代码中创建自定义方言
  • 在SQL server中创建一个名为
    MyYearFunction
    的函数,该函数返回日期的年份
  • 然后使用HQL(不确定QueryOver是否可以这样做)获取日期
    where dbo.MyYearFunction(:date)=12“…

  • QueryOver无法解决诸如
    DateTime.Year
    之类的问题

    请改用LINQ:

    return session.Query<Evento>()
                  .Where(x => x.Register.Year == year)
                  .ToList();
    
    return session.Query()
    .其中(x=>x.Register.Year==Year)
    .ToList();
    
    。其中(x=>x.Register>=新日期时间(年,1,1)和&x.Register<
    新日期时间(年+1,1,1))

    在查询中,您可以说:

    dateTimeColumn.YearPart() == 1999
    

    还有其他扩展方法:
    MonthPart()
    DayPart()
    ,等等。

    year
    已经为大多数方言注册,并且由当前的LINQ提供商处理,没有问题。啊,谢谢Diego,我不知道这一点。你每天都会学到一些东西。我不能像那样使用DateTime,它会返回一个QueryException。如果
    x.Register
    System.DateTime类型,这将起作用
    。这将命中数据库并检索所有记录,对吗?@JWLim no。它被翻译并作为sql执行。啊,我不知道
    Query
    是NHibernate的LINQ提供程序。我大部分时间只使用HQL和QueryOver。谢谢!