在投影查询中帮助group by子句

时间:2011-02-04 18:44:28

标签: c# nhibernate group-by nhibernate-projections

我想将每小时每小时进入机场的人的记录分组。所以基本上我想要在任何特定机场每时每刻都有人来这里。下面是我的代码。

string ArrDate = 
                String.Format("LTRIM(STR(MONTH({0}))) + '/' + LTRIM(STR(DAY({0}))) + '/' + LTRIM(STR(YEAR({0})))", "DestinationDatetime");

            string ArrTime=
                String.Format("rtrim(datepart(hh, DestinationDatetime)) +' Hour'", "DestinationDatetime");

            Template.Criteria.
                SetProjection(
                        Projections.ProjectionList()
                        .Add(Projections.Count("ID"), "ACount")
                        .Add(Projections.SqlGroupProjection(ArrDate  + " as DateVal", ArrDate 
                                new string[] { "DateVal" }, new IType[] { NHibernateUtil.String }))
                        .Add(Projections.SqlGroupProjection(ArrTime + " as TimeVal", ArrTime,
                                new string[] { "TimeVal" }, new IType[] { NHibernateUtil.String }))
                        .Add(Projections.GroupProperty("Airport"), "APort"));

            Template.Criteria.SetResultTransformer(Transformers.AliasToEntityMap);

现在,上面的查询以下面的方式给我记录,

Date   Airport  Time      Count
 12/16  ORD     13 Hour     5
 12/16  ORD     17 Hour     6
 12/16  MWK     10 Hour     7

我希望查询将记录显示为

  Date   Airport  Time      Count
   12/16  ORD      1 pm        5
                   4pm         6
          MWK      10 am       7

所以日期和机场不要一直重复。我希望每小时都有人数进入。即,凌晨1-2点,凌晨2-3点等等。

1 个答案:

答案 0 :(得分:1)

即使nHibernate可以为你做这件事,这绝对不是数据库问题,这是一个表示问题。您需要在演示文稿中添加一些忽略重复日期的逻辑。

这是asp.net,asp.net MVC,WPF还是winforms项目?