我很难说服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
答案 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)");
然后我可以在查询中使用它。