5
このSQLクエリをNHibernate QueryOverにどのように取るかに関するガイダンスを実際に使用することができます。私はLinqをもう少し詳しく知っていたので、Linqを使用しようとしました。私たちが取り組んでいるプロジェクトはQueryOverを使用しているので、今のところそのルートを維持することが最善の方法かもしれません。NHibernateこのSQLクエリをQueryOverまたはLinqに変換する方法
ワーキングSQLクエリ:... 1分、適切にグループ/種類/数に期待
select dateadd(minute,(datediff(minute,0,dateTimeColumn)/1)*1,0), COUNT(*)
from PartData
group by dateadd(minute,(datediff(minute,0,dateTimeColumn)/1)*1,0)
order by dateadd(minute,(datediff(minute,0,dateTimeColumn)/1)*1,0)
戻り値のDateTimeを四捨五入した結果:
2012-08-31 00:00:00.000, 3
2012-08-31 00:01:00.000, 4
2012-08-31 00:02:00.000, 3
2012-08-31 00:03:00.000, 3
2012-08-31 00:04:00.000, 4
2012-08-31 00:05:00.000, 3
2012-08-31 00:06:00.000, 3
2012-08-31 00:07:00.000, 4
2012-08-31 00:08:00.000, 3
EDIT
近づいています...
private IQueryOver<entities.PartData, entities.PartData> PartPerHourQuery(ISession session)
{
return session.QueryOver<entities.PartData>()
.Select(
Projections.Alias(
Projections.GroupProperty(
Projections.SqlFunction(
new SQLFunctionTemplate(NHibernateUtil.DateTime, "DateAdd(mm,1,Date)"),
NHibernateUtil.DateTime, _partsDate))
, "Date"),
Projections.Alias(Projections.RowCount(), "Count"))
.TransformUsing(Transformers.AliasToBean<entities.PartsPerHour>());
}
には、以下のSQLを生成:
SELECT DateAdd(mm,1,dateTimeColumn), count(*)
FROM [PartData]
GROUP BY DateAdd(mm,1,dateTimeColumn)
ちょうどそこにDateDiff関数を取得する方法を見つけ出す必要がある:)
わかりませんでした!よくやった! – Rippo