Nhibernate 类型average(datediff)的投影始终返回0.0
这是非常令人费解的;生成的SQL非常好,我在手动运行时得到了正确的结果。Nhibernate 类型average(datediff)的投影始终返回0.0,nhibernate,nhibernate-projections,Nhibernate,Nhibernate Projections,这是非常令人费解的;生成的SQL非常好,我在手动运行时得到了正确的结果。 但是,在转换过程的某个地方,“AverageTime”字段被设置为0.0,而不是正确的结果。 我的问题是: var query = Session.CreateCriteria<Employee>() .Add(Expression.In("Department", departments.ToArray())) // departmentsContains(employee)
但是,在转换过程的某个地方,“AverageTime”字段被设置为0.0,而不是正确的结果。
我的问题是:
var query = Session.CreateCriteria<Employee>()
.Add(Expression.In("Department", departments.ToArray())) // departmentsContains(employee))
.Add(Expression.Ge("TimeOut", startTime)) // TimeOut >= startTime
.Add(Expression.Le("TimeOut", endTime)) // TimeOut <= endTime
.SetProjection(Projections.Alias(Projections.GroupProperty("Department.Id"), "Id")
, Projections.Alias(Projections.Count("Id"), "EmpCount") //total emps
, Projections.Avg( //average of..
Projections.SqlProjection("datediff(ss, {alias}.TimeIn ,{alias}.TimeOut) as AverageTime", new[] { "AverageTime" }, new[] { NHibernateUtil.Double }) // waiting time
)
)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<EmpsForStatistics>())
.List<EmpsForStatistics>();
private class EmpsForStatistics
{
public int DepartmentId { get; set; }
public int EmpCount { get; set; }
public double AverageTime { get; set; }
}
var query=Session.CreateCriteria()
.Add(Expression.In(“Department”,departments.ToArray())//departmentsContains(employee))
.Add(Expression.Ge(“TimeOut”,startTime))//超时>=startTime
.Add(Expression.Le(“TimeOut”,endTime))//TimeOut='06/07/2011 08:27:58',这个u.TimeOut好吧,我真是太蠢了。忘记将Alias()
添加到Avg
投影。。。嗯
SELECT this_.Department_id as y0_, count(this_.Id) as y1_, avg(cast(datediff(ss, this_.TimeOut ,this_.TimeIn) as DOUBLE PRECISION)) as y2_
FROM nHibernate_test.dbo.[Employees] this_
WHERE this_.Department_id in (4004, 4005, 4006)
and this_.TimeOut >= '06/07/2011 08:27:58' and this_.TimeOut <= '06/07/2011 11:27:58'
GROUP BY this_.Department_id;