2011-07-06 17 views
6

tengo un poco de capa de la fábrica de QueryOver consulta que contenga lo siguiente,Truncar DateTime en NHibernate QueryOver SelectGroup

.SelectList(list => list 
    .SelectGroup(() => txn.GroupField) 
    .SelectGroup(() => txn.Date)) 
.List<object[]>() 

Esta consulta funciona como se espera, sin embargo ahora tengo un requisito para agrupar por la Fecha truncada ya que algunas de las fechas para estos objetos pueden contener un componente de tiempo. Parece que debería ser un cambio trivial, pero no puedo encontrar una manera que sea compatible con NHibernate.

La solución obvia sería el siguiente cambio, pero no es compatible.

.SelectGroup(() => txn.Date.Date)) 

¿Alguna idea?

Gracias

Respuesta

4

Su QueryOver podría tener este aspecto:

Status alias = null; 
var query = QueryOver.Of(() => alias) 
    .Select(Projections.GroupProperty(
     Projections.SqlFunction("date", NHibernateUtil.Date, Projections.Property(() => alias.Date)))); 

salida (pseudo SQL):

SELECT 
      ... 
FROM  [Status] this_ 
GROUP BY dateadd(dd, 0, datediff(dd, 0, this_.Date)) 

Espero que esto ayude, saludos!

+0

Muchas gracias, MonkeyCoder. Intenté utilizar SelectList() /. SelectGroup() con Projections pero fallé. – shatl

0

Es posible que desee agregar una propiedad auxiliar a su mapa, utilizando el comando Fórmula, para poder usar la fecha (en lugar de la fecha y hora) en las consultas.

aquí hay un ejemplo de mi código; se utiliza un valor decimal, pero esto funciona bien con cualquier subconsulta:

clase del modelo tiene esta propiedad, para ser asignada a una fórmula:

public virtual decimal Profit 
{ 
    get { return this.SellPrice - this.Cost; } 
    set { return; } 
} 

mapa fluentNHibernate:

//SellPrice and Cost are columns in the object's table 
Map(v => v.Profit).Formula("(SellPrice - Cost)"); // this field is calculated, not read 

asegúrese para poner la fórmula entre() corchetes sin embargo.

Si hace que su fórmula sea una consulta de selección que enlaza la fecha y hora a una fecha, puede agrupar por esa propiedad en su consulta.

Cuestiones relacionadas