nHibernate 3 - 带有日期时间的 QueryOver

发布于 2024-10-13 07:16:27 字数 703 浏览 5 评论 0原文

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

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

在类 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。

I'm trying to write a query to select using the DateTime. Year as a where parameter, but I'm receiving this error from nunit:

NHibernate.QueryException : could not resolve property: Register.Year of: Estudantino.Domain.Events

In class Events I've a property named Register as a DateTime type.

public virtual DateTime Registada { get; set; }

This is the method that is returning the error:

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

The variable year is of type int, that is been passed to the method.

Does anyone have an idea of what i'm doing wrong? My database server is SQL Server 2005 Express.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

方觉久 2024-10-20 07:16:27

QueryOver 无法解析诸如 DateTime.Year 之类的内容。

使用 LINQ 代替:

return session.Query<Evento>()
              .Where(x => x.Register.Year == year)
              .ToList();

QueryOver does not resolve things like DateTime.Year.

Use LINQ instead:

return session.Query<Evento>()
              .Where(x => x.Register.Year == year)
              .ToList();
缪败 2024-10-20 07:16:27

在QueryOver中,你可以直接说:

dateTimeColumn.YearPart() == 1999

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

In QueryOver, you can just say:

dateTimeColumn.YearPart() == 1999

There is also other extension methods: MonthPart(), DayPart(), etc.

梓梦 2024-10-20 07:16:27

您可能需要在这里使用 HQL。基本上 NHibernate 并不真正知道如何处理year。我怀疑您需要使用 RegisterFunction 来注册 YEAR 函数。

请完整阅读这篇文章,以充分理解它是什么你正在尝试做的事。

  1. 在代码中创建自定义方言
  2. 在 SQL Server 中创建一个名为 MyYearFunction 的函数,该函数返回日期的年份
  3. 然后使用 HQL(不确定 QueryOver 是否可以执行此操作)获取日期,其中 dbo. MyYearFunction(:日期) = 12" ...

You may need to use HQL here instead. Basically NHibernate does not know really what to do with year. I suspect you need to use the RegisterFunction to register a YEAR function.

Please read this article in its entirety to fully understand what it is you are trying to do.

  1. Create a custom dialect in code
  2. Create a function in SQL server called MyYearFunction that returns a year for a date
  3. Then use HQL (not sure if QueryOver can do this) to get the date where dbo.MyYearFunction(:date) = 12" ...
时光清浅 2024-10-20 07:16:27

.Where(x => x.Register >= new DateTime(year, 1, 1) && x.Register <
新的日期时间(年 + 1, 1, 1))

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文