¿Puede la syntax QueryOver de NHibernate seleccionar MAX () de un SqlFunction?

He registrado una función SQL en mi subclase de dialecto

RegisterFunction("addseconds", new SQLFunctionTemplate(NHibernateUtil.Date, "dateadd(second, ?1, ?2)")); 

Que puede ser utilizado en consultas como tal

 var q = _session.QueryOver() .Select( Projections.SqlFunction( "addseconds", NHibernateUtil.Date, Projections.Property(x => x.DurationInSeconds), Projections.Property(x => x.StartTime))); 

produciendo el SQL

 SELECT dateadd(second, this_.DurationInSeconds, this_.StartTime) as y0_ FROM [Event] this_ 

pero lo que realmente estoy buscando es

 SELECT MAX(dateadd(second, this_.DurationInSeconds, this_.StartTime)) as y0_ FROM [Event] this_ 

desafortunadamente, parece que no consigo que SelectMax tome un Problema.SqlFunction. Se puede hacer?

Necesitas actualizar el NHUtil para ser DateTime:

 RegisterFunction("addseconds", new SQLFunctionTemplate(NHibernateUtil.DateTime, "dateadd(second, ?1, ?2)")); 

De lo contrario, solo estará tratando con la parte de la Fecha.

Su consulta está bien, solo necesita envolverla en un Proyections.Max () así:

 var q = _session.QueryOver() .Select(Projections.Max(Projections.SqlFunction( "addseconds", NHibernateUtil.DateTime, Projections.Property(y => y.DurationInSeconds), Projections.Property(y => y.StartTime)))) .SingleOrDefault(); 

Simplemente escribí una prueba rápidamente (nombre diferente al anterior) y produjo la consulta:

 SELECT max(dateadd(second, this_.DurationInSeconds, this_.SomeDate)) as y0_ FROM Employee this_