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)