Hola Giuliano Te paso algo que se hizo hace mucho tiempo para un ejemplo de cómo usar criteria. https://bitbucket.org/darioquintana/course/src/07d854d12783/uNHAddins.Examples.Course/EntitiesNHPersistence.Tests/Criteria/CriteriaFixture.cs https://bitbucket.org/darioquintana/course/src/07d854d12783/uNHAddins.Examples.Course/YourPrjDomain/Criteria/CustomerFinder.cs
El CustomerFinder, tiene una manera ordenada de ir encadenando criterios, el test te muestra cómo utilizarlo. Al hacerlo de esa manera, es facil darle límites a la consulta de Criteria. Saludos 2012/3/1 Giulliano <[email protected]> > Estoy creando una consulta, que tendrá resultados diferentes en > función de los parámetros recibidos y si la situación se cumple, va a > crear un filtro y una cantidad fija de los resultados de esta > situación. El filtro está listo, pero no saben cómo establecer la > cantidad en estas situaciones. A continuación se muestra la consulta: > > public IEnumerable<ConeSlab> ConsultarPlacasAcompanhamento(String > codigoLaminador, Int16 placasAEnfornar, Boolean placasEnfornadas, > Int16 placasDesenfornadas, Boolean placasRejeitadas) > { > try > { > var criteria = DetachedCriteria.For<ConeSlab>() > .CreateAlias("Cone", "C") > .CreateAlias("Slab.SlabPDO", "SP") > .Add(Restrictions.Eq("C.Mill", codigoLaminador)) > .Add(Restrictions.IsNotNull("C.IdentBeginDtm")) > .Add(Restrictions.IsNotNull("SP.IdentBeginDtm")); > > var ordem = "SP.IdentBeginDtm"; > > Junction disjunction = Restrictions.Disjunction(); > > //Identificadas > if (placasAEnfornar > 0) > { > ICriterion criterion = Restrictions.Conjunction() > .Add(Restrictions.IsNotNull("SP.IdentEndDtm")) > .Add(Restrictions.IsNull("SP.ChargeDtm")) > .Add(Restrictions.IsNull("SP.RejectDtm")); > **//How to set here?** > disjunction.Add(criterion); > } > > //Enfornadas > if (placasEnfornadas) > { > ICriterion criterion = Restrictions.Conjunction() > .Add(Restrictions.IsNotNull("SP.ChargeDtm")) > .Add(Restrictions.IsNull("SP.DischDtm")) > .Add(Restrictions.IsNull("SP.RejectDtm")); > disjunction.Add(criterion); > } > > //Desenfornadas > if (placasDesenfornadas > 0) > { > ICriterion criterion = Restrictions.Conjunction() > .Add(Restrictions.IsNotNull("SP.DischDtm")) > .Add(Restrictions.IsNull("SP.MillDtm")) > .Add(Restrictions.IsNull("SP.RejectDtm")); > **//How to set here?** > disjunction.Add(criterion); > } > > //Rejeitadas > if (placasRejeitadas) > criteria.Add(Restrictions.IsNull("SP.RejectDtm")); > > criteria.Add(disjunction); > > return coneSlabRepository.GetListCriteria(criteria, 300, > Order.Desc(ordem)); > > } > catch (Exception ex) > { > Log.Error(AppStrings.EventNatureProgramacaoSequenciamento, > LibStrings.MessageExceptionQuery, ex); > throw new LoggedException(ex.Message); > } > } > > Un ejemplo: > Tengo que mostrar a tan sólo 10 registros y 20 registros > Desenfornadas identificados. Si la condición es también Enfornadas > para mostrar, la pantalla se ve así: > - Todos los registros que satisfacen la condición de Enfornadas > - Identificados 10 registros > - 20 registros Desenformadas. > > Por lo tanto, la cantidad no se puede establecer al final. Tendría > una manera de ajustar de forma individual? > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Dario Quintana -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
