NHibernate过滤条件 - DateTime的小时

时间:2010-01-12 15:24:11

标签: nhibernate datetime fluent-nhibernate linq-to-nhibernate

我很难说服NHibernate(EF能够这样做)根据DateTime实体属性的Hour属性进行过滤。我的实体类似于:

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

但是我被抛出异常,说明无法解析属性Hour of TimeOfRegister ......

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

2 个答案:

答案 0 :(得分:2)

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

在HQL for SqlServer2005中:hour(i.TimeOfRegister)

答案 1 :(得分:1)

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

在实体上定义一个int(或byte)属性(假设为“HourOfRegister”),然后在映射类中将其映射到公式:

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

然后我可以在查询中使用它。