El 15 de febrero de 2011 16:23, Omar Eduardo Martinez
<[email protected]>escribió:

> Cuando hago un query es cierto que voy a traer lo que quiero mostrar,
> pero voy a tener que o usar la misma clase con la cual guardo en la
> base de datos y obviar un atributo o hacer otra clase. No se si me
> explico bien.
>

Te explicas bien, lo que te quiero decir es que rara vez el modelo de
objetos del dominio coincide con el modelo de cosas que queres mostrar en la
pantalla. A estos objetos los llamo ViewModels. suponiendo que necesites
mostrar algo así en la pantalla:

public class ProductaViewModel
{
   public int ProductoId {get;set;}
   public string Nombre {get; set;}
   public decimal ImporteMaximo {get;set;}
   public decimal CantidadVendida{ get; set;}
}


vos podes escribir una simple consulta HQL como esta;

select d.Producto.Id,
          d.Producto.Nombre
         max(d.Precio), sum(d.Cantidad)
from DetalleFactura d
where d.Factura.Fecha between ... and ...
group by d.Producto.Id, d.Producto.Nombre


leugo ejecutar;

var result = session.CreateQuery(consulta).List<object[}>().Select(x => new
ProductoViewModel{ ProductoId = (int)x[0], ProductoNombre = (string)x[1],
.....).ToArray();


en linq sería algo así;

var result = from d in session.Query<DetalleFactura>()
                 where d.Factura.fecha > ..... && ....
                 group by d by d.Producto into g
                 select new ProductoViewModel { ProductoId = g.Key.Id,
  ProductoNombre = g.Key.Nombre,
  ImporteMaximo   = g.Max(d => d.Precio),
  CantidadVendida = g.Sum(d => d.cantidad)};

(perdón la indentación)... El sql que nhibernate ejecuta debería ser *
H-E-R-M-O-S-O* y solo traerte los datos que necesitas.

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a