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