Gracias por compartir la solución genio! ---------------------------------- Carlos Peix
2016-09-15 15:52 GMT-03:00 César Pistiner <chpisti...@gmail.com>: > Hola gente! > > Bueno he logrado solucionar el problema en forma más óptima y les dejo la > forma en que lo hice por si otro se topa con lo mismo. > > Anteriormente lo que hacía era agrupar por Id de la cabecera luego de > obtener la lista, pero esta claro que esto a nivel performance no es lo > ideal, así que encontré la forma de hacer un *DISTINCT* desde *Criteria > Queries* > > Si recuerdan yo creaba el *criteria* de esta forma: > *nhCriteria = nhCriteria.CreateCriteria("Detalles", > NHibernate.SqlCommand.JoinType.InnerJoin); * > > Pero para que funcione como les mencioné hay que hacer lo siguiente: > > > > > *var detallesCriteria = > DetachedCriteria.For<DetalleMovimientoDeRetornables>().SetProjection(Projections.Distinct(Projections.Property("MovimientoDeRetornables.Id")));detallesCriteria.Add(Restrictions.Eq("Producto", > productoAFiltrar));* > > *nhCriteria.Add(Subqueries.PropertyIn("Id", detallesCriteria));* > > Con esto quedó funcionando a la perfección. > > Saludos! > César > > El mié., 14 sept. 2016 a las 17:52, César Pistiner (<chpisti...@gmail.com>) > escribió: > >> No es eso Juan José, muchas gracias de todas formas. >> >> Sigo con el problema. Yo pensé que era algo del mapping porque si >> condiciono solamente por atributos de la cabecera anda perfecto, el tema >> está cuando creo el Criteria del detalle. >> >> Saludos y gracias! >> >> El mié., 14 sept. 2016 a las 17:14, Juan José Montes de Oca Arbós (< >> juanjose.montesdeocaar...@gmail.com>) escribió: >> >>> Hola Cesar, no estoy 100% seguro, pero se me ocurre que si no tenés >>> implementados los métodos de Equals y GetHashCode (o los tenés mal >>> implementados) NHibernate podría devolverte dos objetos que para vos son >>> iguales, pero para NH son diferentes. Se que esto ocurre cuando manejas los >>> objetos en memoria, pero no se si ocurre en el caso de consultarlos a la >>> base de datos. >>> >>> Saludos Y ÉXITOS!! >>> >>> -- >>> Juan José Montes de Oca Arbós. >>> >>> =========================== >>> Web personal: http://juanjose.montesdeocaarbos.com.ar/blog/ >>> >>> El 14 de septiembre de 2016, 17:05, César Pistiner <chpisti...@gmail.com >>> > escribió: >>> >>>> Hola gente, >>>> >>>> Estoy teniendo un problema y no le encuentro la vuelta. Usando >>>> NHibernate con Criteria Queries tengo una entidad que es cabecera-detalle y >>>> cuando obtengo una lista en la cual debo condicionar el detalle me trae un >>>> objeto (cabecera) por cada detalle que tenga. El ejemplo sería así, basado >>>> en movimientos de stock: >>>> >>>> Tengo 2 movimientos: >>>> - MOVIMIENTO 1 >>>> - MOVIMIENTO 2 >>>> >>>> Detalle de MOVIMIENTO 1: >>>> - PRODUCTO A - ENTRADA x 10 - POSICION 001 >>>> - PRODUCTO A - ENTRADA x 20 - POSICION 002 >>>> >>>> Detalle de MOVIMIENTO 1: >>>> - PRODUCTO B - ENTRADA x 10 - POSICION 001 >>>> - PRODUCTO B - ENTRADA x 20 - POSICION 002 >>>> >>>> Si obtengo una lista condicionando los movimientos con PRODUCTO A, >>>> estoy recibiendo una lista que contiene 2 cabeceras, con 2 detalles cada >>>> una. Si inspeccionó dicha lista veo que es el mismo movimiento (MOVIMIENTO >>>> 1) duplicado. >>>> >>>> Ese es el problema, el cual estoy resolviendo con agrupación luego de >>>> obtener la lista. >>>> >>>> El mapping contra los detalles lo tengo así: >>>> >>>> CABECERA >>>> <bag name="Detalles" table="DetalleMovimiento" inverse="true" >>>> cascade="all,delete-orphan" lazy="true"> >>>> <key column="IdMovimiento"/> >>>> <one-to-many class="DetalleMovimiento"/> >>>> </bag> >>>> >>>> DETALLE >>>> <many-to-one name="Movimiento" column="IdMovimiento" class="Movimiento" >>>> foreign-key="FK_DetalleMovimiento_Movimiento"/> >>>> >>>> Luego a través de Criteria Queries lo que hago es: >>>> >>>> nhCriteria = nhCriteria.CreateCriteria("Detalles", >>>> NHibernate.SqlCommand.JoinType.InnerJoin); >>>> >>>> nhCriteria.Add(Restrictions.Eq("Producto", productoAFiltrar)); >>>> >>>> Eso es todo (creo), agradezco cualquier sugerencia o ayuda, tal vez es >>>> un error común, las soluciones que encontré navegando no me dieron >>>> resultado. >>>> >>>> Espero haber sido claro y desde ya agradezco el tiempo robado! >>>> >>>> Aprovecho para saludarlos y agradecer todos los aportes que hacen. >>>> César >>>> >>> -- >>>> -- >>>> Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano@ >>>> googlegroups.com >>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>>> --- >>>> Has recibido este mensaje porque estás suscrito al grupo >>>> "NHibernate-Hispano" de Grupos de Google. >>>> Para anular la suscripción a este grupo y dejar de recibir sus >>>> mensajes, envía un correo electrónico a nhibernate-hispano+ >>>> unsubscr...@googlegroups.com. >>>> Para acceder a más opciones, visita https://groups.google.com/d/optout. >>>> >>> >>> -- >>> -- >>> Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano@ >>> googlegroups.com >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>> --- >>> Has recibido este mensaje porque estás suscrito al grupo >>> "NHibernate-Hispano" de Grupos de Google. >>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes, >>> envía un correo electrónico a nhibernate-hispano+ >>> unsubscr...@googlegroups.com. >>> Para acceder a más opciones, visita https://groups.google.com/d/optout. >>> >> -- > -- > Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano@ > googlegroups.com > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > --- > Has recibido este mensaje porque estás suscrito al grupo > "NHibernate-Hispano" de Grupos de Google. > Para anular la suscripción a este grupo y dejar de recibir sus mensajes, > envía un correo electrónico a nhibernate-hispano+ > unsubscr...@googlegroups.com. > Para acceder a más opciones, visita https://groups.google.com/d/optout. > -- -- Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano@googlegroups.com Para más, visite: http://groups.google.com/group/NHibernate-Hispano --- Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" de Grupos de Google. Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nhibernate-hispano+unsubscr...@googlegroups.com. Para obtener más opciones, visita https://groups.google.com/d/optout.