Search This Blog

Thursday 30 October 2014

01-Teste do WebApi


Vou mostrar um pouquinho do que sei sobre o assunto SPA ( Single-page Applications ) iremos utilizar WebApi e Extjs.

Se você nunca trabalhou com ASP WebApi esse tutorial é para você.

Dividi esse tutorial em 3 partes

- 01 - Teste do WebApi
- 02 - Desenvolvimento do BackEnd
- 03 - Desenvolvimento do FrontEnd


Wednesday 8 January 2014

Reflection Generic List , Generic Method

Tudo bem pessoal,

Bom ano para vocês.

Fiquei um bom tempo para achar essa facilidade que vou compartilhar com vocês, é um caminho para fazer uma consulta de forma genérica não importa que método "Contains,StartsWith" com Linq e Generic utilizando reflection .

Vou tentar fazer um exemplo de forma simples para melhor compreensão da funcionalidade.

C# Code

Primeiro criei uma classe básica para servir de base para a consulta.

   1:   public class Pessoa
   2:      {
   3:          public string Nome { get; set; }
   4:          public string SobreNome { get; set; }     
   5:          public void Popular(){
   6:              Lista = new List<Pessoa>();
   7:              
   8:              Pessoa _p = new Pessoa();
   9:              _p.Nome = "Americo";
  10:              _p.SobreNome = "Arvani";
  11:              Lista.Add(_p);
  12:   
  13:              _p = new Pessoa();
  14:              _p.Nome = "João";
  15:              _p.SobreNome = "Maria";
  16:              Lista.Add(_p);
  17:   
  18:              _p = new Pessoa();
  19:              _p.Nome = "Jose";
  20:              _p.SobreNome = "Da Silva";
  21:              Lista.Add(_p);
  22:          }
  23:          public List<Pessoa> Lista;
  24:      }
 
 
E depois a classe para fazer a LAMBDA dinâmica 
  
 
   1:     public static class LambdaExpressionHelper<T>
   2:      {
   3:   
   4:          /// <summary>
   5:          /// Metodo para consultar de forma generica LAMBDA
   6:          /// </summary>
   7:          /// <param name="propertyName">Nome da Propriedade</param>
   8:          /// <param name="method">Metodo</param>
   9:          /// <param name="args">Valor</param>
  10:          /// <returns>Lambda Expression</returns>        
  11:          public static Expression<Func<T, bool>>       
  12:          Build(string propertyName, string method, params object[] args)
  13:          {            
  14:              
  15:              var propertyInfo = typeof(T).GetProperty(propertyName);           
  16:   
  17:              var e = Expression.Parameter(typeof(T), "e");
  18:              var m = Expression.MakeMemberAccess(e, propertyInfo);
  19:   
  20:              var mi = m.Type.GetMethod(method, args.Select(a => a.GetType()).ToArray());
  21:              var c = args.Select(a => Expression.Constant(a, a.GetType())).ToArray();
  22:   
  23:              Expression call = Expression.Call(m, mi, c);
  24:   
  25:              Expression<Func<T, bool>> lambda = 
Expression.Lambda<Func<T, bool>>(call, e);
  26:              return lambda;
  27:          }
  28:      }
 
 
E por ultimo um evento click em um botão para executar
 
 
   1:  protected void btnExecClick(object sender, EventArgs e)
   2:          {
   3:              Pessoa p = new Pessoa();
   4:              p.Popular();
   5:              
   6:              var expr = LambdaExpressionHelper<Pessoa>.Build(txtCampo.Text, "StartsWith",
 txtValor.Text);
   7:   
   8:              var l = p.Lista.Where(expr.Compile());
   9:   
  10:              GridView1.DataSource = l;
  11:              GridView1.DataBind();       
  12:          }
 
HTML/ASPX 
 


   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
 Inherits="aarvanilab.Default" %>
   2:   
   3:  <!DOCTYPE html>
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml">
   6:  <head runat="server">
   7:      <title></title>
   8:  </head>
   9:  <body>
  10:      <form id="form1" runat="server">
  11:      <div>
  12:          
  13:          <asp:TextBox ID="txtCampo" runat="server" Text="Campo"/>
  14:          <asp:TextBox ID="txtValor" runat="server" Text="Valor"/>
  15:   
  16:          <asp:Button ID="Button1"  runat="server" Text="Executar" OnClick="btnExecClick" />
  17:   
  18:          <asp:GridView ID="GridView1" runat="server">
  19:          </asp:GridView>    
  20:      </div>
  21:      </form>
  22:  </body>
  23:  </html>
 
 
 
Demo em execução

 Nessa execução consultei o campo "Nome" com os dados que iniciam com a letra A, no caso meu nome

 






 
 Nessa execução consultei o campo "Nome" com os dados que iniciam com a letra J, com os dados restantes











Acredito que isso ajuda muito com o caso de filtros dinâmicos com Contains independente da propriedade.

Até a próxima.
Américo 

Translate