Search code examples
c#nhibernatecriterianhibernate-projections

NHibernate Projection queries group by date


I want to write a Projection query in NHibernate that groups records by date and counts "Tax" field value for those records. My question is that the database has the value as DateTime, how will I group records just by date and not time.Below is my code

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

The database stores the IssueDatetime field as DateTime type. I want to count the Tax per date and ignore the time part. Can anybody help me out with the above requirement?


Solution

  • Use the following for the first projection:

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

    For NH 2.x:

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