4

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

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

在类事件中,我有一个名为Register作为 DateTime 类型的属性。

public virtual DateTime Registada { get; set; }

这是返回错误的方法:

  using (ISession session = NHibernateHelper.OpenSession())
        {
            return session.QueryOver<Evento>()
                .Where(x => x.Register.Year == year)
                .List();
        }

变量 year 的类型是int,它被传递给方法。

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

4

4 回答 4

7

QueryOver 不能解决诸如DateTime.Year.

改用 LINQ:

return session.Query<Evento>()
              .Where(x => x.Register.Year == year)
              .ToList();
于 2011-01-24T14:53:13.480 回答
5

在 QueryOver 中,你可以说:

dateTimeColumn.YearPart() == 1999

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

于 2013-12-06T21:58:07.213 回答
3

您可能需要在此处改用 HQL。基本上 NHibernate 真的不知道该怎么做year。我怀疑您需要使用RegisterFunction来注册YEAR功能。

请完整阅读这篇文章,以充分了解您要执行的操作。

  1. 在代码中创建自定义方言
  2. 在 SQL Server 中创建一个函数,调用MyYearFunction该函数返回日期的年份
  3. 然后使用 HQL(不确定 QueryOver 是否可以这样做)来获取日期where dbo.MyYearFunction(:date) = 12" ...
于 2011-01-23T16:06:27.827 回答
-1

.Where(x => x.Register >= new DateTime(year, 1, 1) && x.Register < new DateTime(year + 1, 1, 1))

于 2011-06-03T11:40:46.873 回答