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].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.