NHibernate 使用 SqlFunction 选择列,按相同条件分组

标签 nhibernate queryover

我需要查询基于每一天的计数以及按相同条件分组。生成的查询应该类似于

select SendTo, dateadd(dd,
                 0,
                 datediff(dd,
                          0,
                          WorkToBeginDate))
from Locates
group by SendTo, dateadd(dd,
                 0,
                 datediff(dd,
                          0,
                          WorkToBeginDate))

我目前正在使用下面的查询,但它没有按 date 分组.

var dateGroupBy = Projections.SqlFunction("date", NHibernateUtil.Date,
    Projections.Group<Domain.Locate>(g => g.WorkToBeginDate));

var stats = 
    _session.QueryOver<Domain.Locate>()
    .SelectList(x => x
        .SelectGroup(xx => xx.SendTo).WithAlias(() => statsDto.SentTo)
        .SelectCount(xx => xx.LocateId).WithAlias(() => statsDto.Count)
        .Select(dateGroupBy)
        .WithAlias(() => statsDto.DueDate))
    .TransformUsing(Transformers.AliasToBean<StatsDto>())
    .List<StatsDto>();

执行这个查询会产生

SELECT   this_.SendTo                             as y0_,
         count(this_.LocateId)                    as y1_,
         dateadd(dd,
                 0,
                 datediff(dd,
                          0,
                          this_.WorkToBeginDate)) as y2_
FROM     Locates this_
GROUP BY this_.SendTo,
         this_.WorkToBeginDate

我假设这是因为我正在使用 Select而不是 SelectGroup在我的预测中。我试过.SelectGroup(xx => new SqlFunctionProjection("date", NHibernateUtil.Date, Projections.Group<Domain.Locate>(g => g.WorkToBeginDate))) , 然而这给了我 Could not determine member from new SqlFunctionProjection("date", NHibernateUtil.Date, new [] {Group(g => Convert(g.WorkToBeginDate))}) .

最佳答案

您可以使用另一个 Projections.Group 方法嵌套 dateGroupBy 值。

var dateGroupBy = Projections.Group(Projections.SqlFunction("date", NHibernateUtil.Date,
Projections.Group<Domain.Locate>(g => g.WorkToBeginDate)));

这应该会给你想要的结果。 :)

关于NHibernate 使用 SqlFunction 选择列,按相同条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992663/

相关文章:

NHibernate 3.0 QueryOver 相当于 Nhibernate Linq 中的 FetchMany

nhibernate - NHibernate 中带有 Select 和 OrderBy 的 QueryOver

NHibernate MVVM session 最佳实践

nhibernate - NHibernate QueryOver 可以使用 MultiQuery 吗?

nhibernate - 如何在 Fluent NHibernate 中关闭锁定?

c# - 在 nhibernate queryover 查询中指定获取策略(选择、连接等)

nhibernate - 使用NHibernate和QueryOver联接多个表

c# - 出现异常 WCF/IIS7.0 实现 NHibernate.HibernateException : Creating a proxy instance failed

wpf - MVC 模式与 WPF + NHibernate + IoC

c# - NHibernate QueryOver - 结果太多的集合