Мне нужно запросить счет на основе каждого дня, а также группы по тем же критериям. Сгенерированный запрос должен выглядеть примерно так:
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))})
.