nHibernate 3-带日期时间的查询版本
我正在尝试使用DateTime编写一个要选择的查询。年份作为where参数,但我从nunit收到此错误: NHibernate.QueryException:无法解析属性:Register.Year of:Estudantino.Domain.Events 在类Events中,我有一个名为Register的属性作为日期时间类型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
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
来注册年份
功能
请通读这篇文章,以充分理解你想做什么
MyYearFunction
的函数,该函数返回日期的年份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。谢谢!