Tôi thực sự có thể sử dụng một số hướng dẫn về cách thực hiện truy vấn sql này với NHibernate QueryOver. Nỗ lực của tôi là sử dụng LINQ vì tôi quen với Linq hơn một chút. Dự án mà chúng tôi đang thực hiện đang sử dụng QueryOver nên có thể tốt nhất là nên duy trì tuyến đường đó ngay bây giờ.NHibernate Làm thế nào để chuyển đổi truy vấn SQL này thành QueryOver hoặc LINQ
Working SQL Query: Làm tròn DateTime đến 1 phút và nhóm/loại/đếm đúng ...
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 dự kiến kết quả:
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
Tôi đang tiến gần hơn ...
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>());
}
suất SQL sau đây:
SELECT DateAdd(mm,1,dateTimeColumn), count(*)
FROM [PartData]
GROUP BY DateAdd(mm,1,dateTimeColumn)
Chỉ cần tìm ra cách để có được những datediff trong đó :)
Tôi không nhận ra điều đó là có thể! Làm tốt! – Rippo