NHibernate筛选条件 - 小时的日期时间

问题描述:

我有难以令人信服的NHibernate(EF能够做到这一点)基于DateTime实体属性的Hour属性进行筛选。我的实体类似于:NHibernate筛选条件 - 小时的日期时间

public class Invoice { 
    // ... 
    public DateTime Time { get; set; } 
    // ... 
} 

我需要检索在某个小时(例如22)“制作”的所有发票。一个可能的查询可以是:

from i in s.Linq<Invoice>() 
where i.Type.Id == Invoice.Type.Local && 
     i.TimeOfRegister.Hour == 22 
select i 

但是我被抛出的异常,说明TimeOfRegister的财产小时不能被解析...

LE:异常的详细信息:无法解析属性:TimeOfRegister.Hour:MyCompany.Entities.Invoice

嗯,我的一位同事建议采取另一条路线:

定义一个int(或字节)属性的实体(假设“HourOfRegister”),然后在它的映射类映射到一个公式:

Map(a => a.HourOfRegister).Formula("DATEPART(HOUR, TimeOfRegister)"); 

然后,我可以作为我喜欢用它在查询中。

听起来像NHibernate没有看到一个DateTime作为一个组件,它具有它可以选择的属性,它将它视为一个属性。您可能必须使用函数来获取DateTime的Hour部分。

在HQL的SQLServer2005的:小时(i.TimeOfRegister)