My domain classes is represented by E in this methods.
PaginationFor is:

    public class PaginationFor<TEntity>
        where TEntity: class, IEntity
    {
        public PaginationFor()
        {
            this.Filters =
                new KeyValueOperationTrio[] { };
        }

        [DataMember]
        public int PageIndex { get; set; }

        [DataMember]
        public int PageSize { get; set; }

        [DataMember]
        public KeyValuePair<string, bool>[] Orders { get; set; }

        [DataMember]
        public KeyValueOperationTrio[] Filters { get; set; }
}

I encapsulates the logic to simplify my query. Basically, I add the filter
in PaginationFor and in my Extension Method I convert my filters in
Pagination for to Expression to Criteria.

I´m sorry by my english because yet I´m learning


2010/4/14 Diego Mijelshon <[email protected]>

> "All very simple"??
> I don't even see a reference to the domain classes you mentioned in that
> code.
>
>    Diego
>
>
> On Wed, Apr 14, 2010 at 11:18, Diego Dias <[email protected]> wrote:
>
>> This is code that generates the Criteria:
>>
>> public static PagedList<E> Paginate<E>(this PaginationFor<E> pagination,
>> ICriteria criteria)
>>             where E : class, IEntity
>>         {
>>             if (criteria == null)
>>             { throw new ArgumentNullException("A criteria deve ser
>> passada!"); }
>>
>>             //Limitar o numero de resultados
>>             SetMaxResults<E>(pagination, criteria);
>>
>>             // adicionar os filtros, para limitar a pesquisa
>>             SetFilters<E>(pagination, criteria);
>>
>>             // adicionar a ordenação, para os resultados
>>             AddOrders<E>(pagination, criteria);
>>
>>             //obter a contagem de registros
>>             int count = GetCount(criteria);
>>
>>             var list = criteria.List();
>>
>>             // obter os resultados
>>             IList<E> entitiesList = list.Cast<E>().ToList();
>>
>>             // caso existam, retirar a referencia a coleções supérfluas
>>             if (pagination.Filters.Length > 0)
>>             {
>>                 entitiesList =
>>                     entitiesList.LoadWithout<E>(pagination.Filters);
>>             }
>>             // retornar a coleção pronta
>>             return new PagedList<E>(entitiesList, count);
>>         }
>>
>>         public static void SetMaxResults<E>(PaginationFor<E> pagination,
>> ICriteria criteria)
>>             where E : class, IEntity
>>         {
>>             //caso for enviado o tamanho zero, significa que a query
>>             //deve retornar todos os registros, segundo os filtros
>>             if (pagination.PageSize == 0) { return; }
>>
>>             criteria
>>                 .SetMaxResults(pagination.PageSize)
>>                 .SetFirstResult(pagination.PageIndex *
>> pagination.PageSize);
>>         }
>>
>>         public static void AddOrders<E>(PaginationFor<E> pagination,
>> ICriteria criteria)
>>             where E : class, IEntity
>>         {
>>             pagination.Orders.Foreach(
>>                 co => {
>>                     criteria.AddOrder(
>>                         new Order(criteria.CreatePath(co), co.Value));
>>                 });
>>         }
>>
>> And to generates the filter of the criteria we are using a object as:
>>
>> public class filter{
>>         public string property{get;set;}
>>
>>         public object value{get;set;}
>>
>>         public Operation operation {get;set;} being that Operation is a
>> Enun like the operations: Equals, NotEquals, Like...
>> }
>>
>> All very very simple.
>>
>> 2010/4/14 Diego Mijelshon <[email protected]>
>>
>>> Indeed
>>>
>>>    Diego
>>>
>>>
>>>
>>> On Wed, Apr 14, 2010 at 11:06, Richard Wilde <[email protected]>wrote:
>>>
>>>>  I suspect Diego wants to see the code (hql, linq etc) that you use to
>>>> generate the code, not the SQL itself...
>>>>
>>>>
>>>>
>>>> Many Thanks
>>>> Richard
>>>>
>>>>
>>>>
>>>> *From:* [email protected] [mailto:[email protected]] *On
>>>> Behalf Of *Diego Dias
>>>> *Sent:* 14 April 2010 14:55
>>>> *To:* [email protected]
>>>> *Subject:* Re: [nhusers] Mapping Nhibernate
>>>>
>>>>
>>>>
>>>> In previous messages, but here too:
>>>>
>>>>
>>>>
>>>>  SELECT  this_.IdMatricula as IdMatric1_122_14_,
>>>>      this_.IdTurma as IdTurma122_14_,
>>>>      this_.IdUsuario as IdUsuario122_14_,
>>>>      turma3_.IdTurma as IdTurma25_0_,
>>>>      turma3_.idTurmaStatus as idTurmaS2_25_0_,
>>>>      turma3_.IdCurso as IdCurso25_0_,
>>>>      curso4_.IdCurso as IdCurso31_1_,
>>>>      curso4_.idStatus as idStatus31_1_,
>>>>      curso4_.IdTipoCurso as IdTipoC10_31_1_,
>>>>      curso4_.IdOrganization as IdOrgan11_31_1_,
>>>>      statuscurs5_.idStatus as idStatus54_2_,
>>>>      statuscurs5_.strStatus as strStatus54_2_,
>>>>      tipocurso6_.strDescricao as strDescr2_125_3_,
>>>>      padraocomu7_.strNmPadrao as strNmPad2_103_4_,
>>>>      organizati8_.Id_Organization as Id1_87_5_,
>>>>      organizati8_.strTitle as strTitle87_5_,
>>>>      cursoprese9_.IdCurso as IdCurso6_6_,
>>>>      turmastatu10_.idTurmaStatus as idTurmaS1_91_7_,
>>>>      usuario1_.IdUsuario as IdUsuario116_10_,
>>>>      organizaca14_.idOrganizacao as idOrgani1_83_11_,
>>>>      cargo15_.idCargo as idCargo7_12_,
>>>>      matriculas16_.idMatriculaStatus as idMatric1_15_13_
>>>>       FROM tracking.matriculas this_
>>>>     inner join cursos.turmas turma3_ on
>>>> this_.IdTurma=turma3_.IdTurma
>>>>     left outer join schemadbo.cursos curso4_ on
>>>> turma3_.IdCurso=curso4_.IdCurso
>>>>     left outer join schemadbo.status statuscurs5_ on
>>>> curso4_.idStatus=statuscurs5_.idStatus
>>>>     left outer join schemadbo.tipos tipocurso6_ on
>>>> curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso
>>>>     left outer join schemadbo.PadraoComunicacao padraocomu7_ on
>>>> curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao
>>>>     left outer join schemadbo.lms_cp_organizations organizati8_ on
>>>> curso4_.IdOrganization=organizati8_.Id_Organization
>>>>     left outer join schemadbo.CursosPresenciais cursoprese9_ on
>>>> curso4_.IdCurso=cursoprese9_.IdCurso
>>>>     left outer join schemadbo.turmasstatus turmastatu10_ on
>>>> turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus
>>>>     left outer join schemadbo.turmaspresenciais turmaprese11_ on
>>>> turma3_.IdTurma=turmaprese11_.idTurma
>>>>     inner join schemadbo.matriculasresumo matricular12_ on
>>>> this_.IdMatricula=matricular12_.IdMatricula
>>>>     inner join schemadbo.usuarios usuario1_ on
>>>> this_.IdUsuario=usuario1_.IdUsuario
>>>>     left outer join schemadbo.Organizacoes organizaca14_ on
>>>> usuario1_.idOrganizacao=organizaca14_.idOrganizacao
>>>>     left outer join schemadbo.cargos cargo15_ on
>>>> usuario1_.idCargo=cargo15_.idCargo
>>>>     inner join schemadbo.matriculasstatus matriculas16_ on
>>>> this_.idMatriculaStatus=matriculas16_.idMatriculaStatus
>>>>      WHERE this_.IdTurma = @p0
>>>>
>>>> 2010/4/14 Diego Mijelshon <[email protected]>
>>>>
>>>> Where's the code that generates the query?
>>>>
>>>>    Diego
>>>>
>>>>   On Wed, Apr 14, 2010 at 10:49, Diego Dias <[email protected]>
>>>> wrote:
>>>>
>>>>  Someone?
>>>>
>>>> 2010/4/13 Diego Dias <[email protected]>
>>>>
>>>>
>>>>
>>>> Hi, guys.
>>>>
>>>> I'm with a problem with the query that NHibernate generates. My
>>>> mapping is like bellow and I'm using ActiveRecord to do mapping:
>>>>
>>>>    public class Matricula
>>>>    {
>>>>           [BelongsTo("IdTurma", NotNull=True)]
>>>>           public Turma {get;set;}
>>>>    }
>>>>
>>>>    public class Turma
>>>>    {
>>>>          [BelongsTo("IdCurso", NotNull=True)]
>>>>          public Curso {get;set;}
>>>>    }
>>>>
>>>>    public class Curso
>>>>    {
>>>>           [PrimaryKey("IdCurso", Generator=PrimaryKeyType.Identity)]
>>>>           public int IdCurso{get;set;}
>>>>    }
>>>>
>>>> The problem is: The Nh generates the query with left where should be
>>>> inner. Between Matricula and Turma they makes inner, but between Turma
>>>> and Curso they makes left outer. What's problem? What's wrong?
>>>>
>>>> My query:
>>>>
>>>>    SELECT  this_.IdMatricula as IdMatric1_122_14_,
>>>>      this_.IdTurma as IdTurma122_14_,
>>>>      this_.IdUsuario as IdUsuario122_14_,
>>>>      turma3_.IdTurma as IdTurma25_0_,
>>>>      turma3_.idTurmaStatus as idTurmaS2_25_0_,
>>>>      turma3_.IdCurso as IdCurso25_0_,
>>>>      curso4_.IdCurso as IdCurso31_1_,
>>>>      curso4_.idStatus as idStatus31_1_,
>>>>      curso4_.IdTipoCurso as IdTipoC10_31_1_,
>>>>      curso4_.IdOrganization as IdOrgan11_31_1_,
>>>>      statuscurs5_.idStatus as idStatus54_2_,
>>>>      statuscurs5_.strStatus as strStatus54_2_,
>>>>      tipocurso6_.strDescricao as strDescr2_125_3_,
>>>>      padraocomu7_.strNmPadrao as strNmPad2_103_4_,
>>>>      organizati8_.Id_Organization as Id1_87_5_,
>>>>      organizati8_.strTitle as strTitle87_5_,
>>>>      cursoprese9_.IdCurso as IdCurso6_6_,
>>>>      turmastatu10_.idTurmaStatus as idTurmaS1_91_7_,
>>>>      usuario1_.IdUsuario as IdUsuario116_10_,
>>>>      organizaca14_.idOrganizacao as idOrgani1_83_11_,
>>>>      cargo15_.idCargo as idCargo7_12_,
>>>>      matriculas16_.idMatriculaStatus as idMatric1_15_13_
>>>>       FROM tracking.matriculas this_
>>>>     inner join cursos.turmas turma3_ on
>>>> this_.IdTurma=turma3_.IdTurma
>>>>     left outer join schemadbo.cursos curso4_ on
>>>> turma3_.IdCurso=curso4_.IdCurso
>>>>     left outer join schemadbo.status statuscurs5_ on
>>>> curso4_.idStatus=statuscurs5_.idStatus
>>>>     left outer join schemadbo.tipos tipocurso6_ on
>>>> curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso
>>>>     left outer join schemadbo.PadraoComunicacao padraocomu7_ on
>>>> curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao
>>>>     left outer join schemadbo.lms_cp_organizations organizati8_ on
>>>> curso4_.IdOrganization=organizati8_.Id_Organization
>>>>     left outer join schemadbo.CursosPresenciais cursoprese9_ on
>>>> curso4_.IdCurso=cursoprese9_.IdCurso
>>>>     left outer join schemadbo.turmasstatus turmastatu10_ on
>>>> turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus
>>>>     left outer join schemadbo.turmaspresenciais turmaprese11_ on
>>>> turma3_.IdTurma=turmaprese11_.idTurma
>>>>     inner join schemadbo.matriculasresumo matricular12_ on
>>>> this_.IdMatricula=matricular12_.IdMatricula
>>>>     inner join schemadbo.usuarios usuario1_ on
>>>> this_.IdUsuario=usuario1_.IdUsuario
>>>>     left outer join schemadbo.Organizacoes organizaca14_ on
>>>> usuario1_.idOrganizacao=organizaca14_.idOrganizacao
>>>>     left outer join schemadbo.cargos cargo15_ on
>>>> usuario1_.idCargo=cargo15_.idCargo
>>>>     inner join schemadbo.matriculasstatus matriculas16_ on
>>>> this_.idMatriculaStatus=matriculas16_.idMatriculaStatus
>>>>      WHERE this_.IdTurma = @p0
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<nhusers%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nhusers?hl=en.
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<nhusers%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nhusers?hl=en.
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<nhusers%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nhusers?hl=en.
>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<nhusers%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nhusers?hl=en.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<nhusers%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/nhusers?hl=en.
>>>>
>>>
>>>  --
>>> You received this message because you are subscribed to the Google Groups
>>> "nhusers" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<nhusers%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/nhusers?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<nhusers%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/nhusers?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to