NHibernate投影查询按日期分组

问题描述:

我想在NHibernate中编写一个投影查询按日期对记录进行分组并计算这些记录的“税”字段值。我的问题是,该数据库具有价值的DateTime,time.Below我将如何组记录只是按日期,而不是是我的代码NHibernate投影查询按日期分组

template.Criteria.SetProjection(
       Projections.ProjectionList() 
       .Add(Projections.GroupProperty("IssueDatetime"), "DateVal") 
       .Add(Projections.Sum("Tax"), "TotalFare") 
      ); 

数据库存储IssueDatetime字段DateTime类型。我想计算每个日期的税额并忽略时间部分。有人能帮我解决上述问题吗?

使用的第一投影如下:

Projections.GroupProperty(
    Projections.SqlFunction("date", 
          NHibernateUtil.Date, 
          Projections.GroupProperty("IssueDateTime"))) 

对于NH 2.X:

Projections.GroupProperty(
    Projections.SqlFunction(new SQLFunctionTemplate(
           NHibernateUtil.Date, 
           "dateadd(dd, 0, datediff(dd, 0, ?1))"), 
          NHibernateUtil.Date, 
          Projections.GroupProperty("IssueDateTime"))) 
+0

当我用上面的投影,我得到下面的错误,错误“NHibernateUtil”这个名字不会在当前上下文中。我试过包括NHibernate.Util命名空间,但它仍然给出了相同的错误.. – developer 2010-12-09 15:07:47

+1

它在NHibernate命名空间中,检查拼写。 – 2010-12-09 16:07:40

假设SQL Server和T-SQL,这会的ICriteria做到这一点。

IList results = Session.CreateCriteria(typeof(Record), "record") 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.SqlGroupProjection("CONVERT(date, {alias}.[IssueDatetime]) AS [DateVal]", "CONVERT(date, {alias}.[IssueDatetime])", new[] { "DateVal" }, new IType[] { NHibernateUtil.Date })) 
     .Add(Projections.Sum("Tax"), "TotalFare")) 
    .List(); 

将生成以下SQL。

SELECT CONVERT(date, this_.[IssueDatetime]) AS [DateVal], sum(this_.Tax) as y1_ FROM IgnoreTime_Record this_ GROUP BY CONVERT(date, this_.[IssueDatetime])