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

Responder a