代码之家  ›  专栏  ›  技术社区  ›  Andrei Rînea

nHibernate筛选条件-日期时间的小时数

  •  0
  • Andrei Rînea  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Fried Hoeben    15 年前

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

    在用于SQLServer2005的HQL中:小时(i.timeofregister)

        2
  •  1
  •   Andrei Rînea    15 年前

    一位同事建议我走另一条路:

    在实体(例如“hourofregister”)上定义int(或byte)属性,然后在映射类中将其映射到公式:

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

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