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.