quarta-feira, 15 de abril de 2015

Linq For Delphi XE

 



  1. Cria a árvore de expressões;
  2. Converte a expressão para SQL;
  3. Executa a consulta;
  4. Retorna os dados;
  5. Converte os dados para Objeto.
Exemplos:

Select

var
  Query: IQueryAble;
begin
  Query := From(Pessoa).Select;
  Dataset.data := Context.GetData(Query);
end;


Where

var
  Query: IQueryAble;
begin
  Query := From(PessoaFisica).
                Where( PessoaFisica.Id=1 ).
                Select([PessoaFisica.CPF,PessoaFisica.Nome]);
  Dataset.data := Context.GetData(Query);
end;


Joins

var
  Query: IQueryAble;
begin
  Query := From(Pessoa).
               Join( Pessoa.Endereco , 
                       Pessoa.Endereco.PessoaId = Pessoa.Id ).
               JoinLeft( PessoaFisica, 
                            PessoaFisica.Id=Pessoa.Id).
               Where(Pessoa.Id=1).
               Order([Pessoa.Nome]).
               Select([Pessoa.Nome]);

  Dataset.data := Context.GetData(Query);
end;


var
  Query: IQueryAble;
begin
    Query := From([Pessoa, PessoaFisica]).Select;
    Dataset.data := Context.GetData(Query);
end;

SubQuery

var   SubQuery: string;
  Query : IQueryAble;

begin

  Query  := From( From( Pessoa ).

                 Join(PessoaFisica, Pessoa.Id = PessoaFisica.Id).

                 Select(Pessoa.Nome) ).Select('NomeFantasia');

  Dataset.data := Context.GetData(Query);
End;

Agregates
var  Query : IQueryAble;
begin
  Query  :=  From(Pessoa).            
                 Join(PessoaFisica, PessoaFisica.Id = pessoa.Id).        
                 GroupBy(Pessoa.Classificacao).
                 Select([Pessoa.Classificacao]).Count;

  Dataset.data := Context.GetData(Query);
End;


ToList

var  Query: IQueryAble;

  CliList: TList<TEntity>;

begin

  CliList:= TList<TEntity>.create;

  Query := From(Cliente).Select;

  CliList := Context.ToList(Query);
End;


Funções Strings

var  Query: IQueryAble;
begin
   Query := From(Pessoa).Select([Pessoa.Nome.LTRIM]);
ou
   Query := From(Pessoa).Select([Pessoa.Nome.UPPER]);
ou
   Query := From(Pessoa).Select([Pessoa.Nome.SubString(1,10)]);
...
end;


In

var  Query: IQueryAble;

begin

  Query := From(Pessoa).

                Where( Pessoa.Nome in ['A','B','C'] ).

                Select([Pessoa.Nome]);

  Context.GetQuery(Query) );

end;


Like 


var
  Query: IQueryAble;
begin
  Query := From(Pessoa).
                Where(  Pessoa.Nome.Contains('Lindemberg%') ).
                Select([Pessoa.Nome]);


Case


var  Cli: TCliente;
  Query: IQueryAble;
begin

   query := From(cli).
                 Select(
                 [ CaseOf(  cli.CPFCNPJ ,
                 ['02316937453' , '00123456000155'],
                 ['Fisica' , 'Juridica']).
                 &As('TipoPessoa')] );

end;


Union


var  Query: IQueryAble;
begin
   Query := From(PessoaFisica).
                 Select([PessoaFisica.Nome]).
                 Union( From(PessoaJuridica).
                        Select([PessoaJuridica.Nome]) );

end;



Union All

var  Query: IQueryAble;
begin
   Query := From(PessoaFisica).
                 Select([PessoaFisica.Nome]).
                 Concat( From(PessoaJuridica).
                        Select([PessoaJuridica.Nome]) );
end;


Not Exist


var  Query: IQueryAble;
begin
   Query := From(PessoaFisica).
                 Select([PessoaFisica.Nome]).
                 &Except( From(PessoaJuridica).
                        Select([PessoaJuridica.Nome]) );
end;


Exist


var  Query: IQueryAble;
begin
   Query := From(Pessoa).
                         Select([Pessoa.Nome.&As]).
                                  Intersect( From(PessoaJuridica).
                                              Select([PessoaJuridica.Nome]) );
end;


Distinct


var  Query: IQueryAble;
begin
  Query := From(Pessoa).Select(Pessoa.Id).Distinct(Pessoa.Nome);

end;


Generics

var  Query: IQueryAble;
begin

     Query := From(Cli).

                  Select([ Cli.CPFCNPJ ]).

                  Where(Cli.CPFCNPJ = '02316937453'  );



     Cliente := Context.GetEntity<TCliente>(Query);
end;


var  Query: IQueryAble;
      ClientesList: TList<TCliente>;
begin
    ClientesList:= TList<TCliente>.create;

    Query := From(TCliente).Select;


    ClientesList := Context.GetList<TCliente>(Query);

    showmessage( CliList.Items[0].CPFCNPJ );

Reference


var
  Query: IQueryAble;
begin
    Query := From(Pessoa).
                 Join(Pessoa.Endereco).//aqui o join se baseará no valor do atributo "Reference"
                 Where(Pessoa.Id = 1).
                 Select([ Pessoa.Nome,Pessoa.Endereco.Logradouro]) ;

end;

8 comentários:

  1. qual é o endereço para baixar esse framework, mande o endereço para herminiolpaesjr@gmail.com agradecido

    ResponderExcluir
  2. Olá, você pode mandar esta framework para mim? weslei.wds.dossantos@gmail.com Obrigado!

    ResponderExcluir

  3. constructor TContext.Create(E: TEnumEntities);
    begin
    inherited Create(TFactoryConnection.GetConnection);
    Entity:= TFactoryEntity.GetEntity(E);
    end;

    [dcc32 Error] Context.pas(26): E2250 There is no overloaded version of 'Create' that can be called with these arguments
    [dcc32 Fatal Error] InterfaceRepository.pas(6): F2063 Could not compile used unit 'Context.pas'

    COMPİLER ERROR !!!

    ResponderExcluir