Projections.Distinct y ordenacion
Oscar Acosta <oscar.acostamontesde <at> googlemail.com>
2009-05-05 12:47:33 GMT
Hola:
Tengo una BBDD sql server 2005. En ella hay dos tablas, Pedido y PedidosEstadosPedido. La idea es que un pedido puede tener distintos estados. La estructura de las tablas es como sigue:
Pedido:
Id int pk
FechaCreacion datetime
otros campos
.....
PedidosEstadosPedido
IdPedido int pk
CodigoEstadoPedido char(10) pk
En un formulario web quiero mostrar todos los pedidos, y debo ser capaz de filtrar por estados. Como un pedido puede tener n estados, debo lanzar un distinct para evitar que me devuelva un registro pedido por cada registro pedidoestadopedido.
El codigo queda asi:
public ICriteria Browse1_GetCriteria(){
ICriteria _criteria = _pedidoFactory.GetBasicCriteria();
_criteria.CreateCriteria("PedidoEstadosPedido", "PedidoEstadosPedido", JoinType.RightOuterJoin);
_criteria.Add(Expression.Eq("CodigoFirma", Brand.Codigo));
_criteria.SetProjection(
Projections.Distinct(
Projections.ProjectionList().Add(
Projections.Property("Id"), "Id").Add(
Projections.Property("FechaCreacion"), "FechaCreacion").Add(
Projections.Property("NomAgente"), "NomAgente").Add(
Projections.Property("CodigoCliente"), "CodigoCliente").Add(
Projections.Property("NomCliente"), "NomCliente").Add(
Projections.Property("DesDireccionEnvio"), "DesDireccionEnvio").Add(
Projections.Property("ImporteTotal"), "ImporteTotal"))).SetResultTransformer(
Transformers.AliasToBean(typeof(Pedido)));
foreach (ICriterion _filter in Browse1_GetFilters()){
_criteria.Add(_filter);
}
return _criteria;
}
Todo funciona correctamente hasta que se quiere ordenar el grid por la columna id. Nhibernate genera un codigo sql incorrecto:
SELECT TOP 25 y0_, y1_, y2_, y3_, y4_, y5_, y6_ FROM (
SELECT ROW_NUMBER() OVER(
ORDER BY __hibernate_sort_expr_1__) as row,
query.y0_, query.y1_, query.y2_, query.y3_, query.y4_, query.y5_, query.y6_, query.__hibernate_sort_expr_1__ FROM (
SELECT distinct this_.Id as y0_, this_.FechaCreacion as y1_, this_.NomAgente as y2_, this_.CodigoCliente as y3_, this_.NomCliente as y4_,
this_.DesDireccionEnvio as y5_, this_.ImporteTotal as y6_, distinct this_.Id as __hibernate_sort_expr_1__
FROM [dbo].[Pedido] this_ right outer join PedidoEstadosPedido pedidoesta1_ on this_.Id=pedidoesta1_.IdPedido
WHERE this_.CodigoFirma = '000') query ) page WHERE page.row > 0 ORDER BY __hibernate_sort_expr_1__
Msg 156, Level 15, State 1, Line 6
Sintaxis incorrecta cerca de la palabra clave 'distinct'.
Alguna idea acerca de como evitar este error?
Saludos,
--
Oscar Acosta
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---