0

我很难说服 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

但是我被抛出一个异常,指出 TimeOfRegister 的属性 Hour 无法解析...

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

4

2 回答 2

2

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

在 SqlServer2005 的 HQL 中:小时(i.TimeOfRegister)

于 2010-01-12T16:45:00.833 回答
1

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

在实体上定义一个 int(或一个字节)属性(比如说“HourOfRegister”),然后在映射类中将其映射到一个公式:

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

然后我可以根据需要在查询中使用它。

于 2010-01-13T12:28:10.907 回答