Ich könnte wirklich einige Hinweise dazu verwenden, wie diese SQL-Abfrage zu NHibernate QueryOver zu nehmen. Meine Versuche waren, Linq zu verwenden, da ich mit Linq etwas vertrauter bin. Das Projekt, an dem wir arbeiten, verwendet QueryOver, daher ist es am besten, diese Route vorerst beizubehalten.NHibernate Wie konvertiert man diese SQL-Abfrage zu QueryOver oder Linq
Arbeits SQL Query: richtig Runden Datetime auf 1 Minute und Gruppen/Sorten/Zählungen ...
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)
Returns erwarteten Ergebnisse:
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
Ich komme näher ...
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>());
}
ergibt die folgende SQL:
SELECT DateAdd(mm,1,dateTimeColumn), count(*)
FROM [PartData]
GROUP BY DateAdd(mm,1,dateTimeColumn)
brauchen nur um herauszufinden, wie die datediff da rein :)
Wow, ich wusste nicht, dass das möglich war! Gut gemacht! – Rippo