Páginas

segunda-feira, 4 de fevereiro de 2013

LINQ: Utilizando where e Classe anônima


Olá! Vamos filtrar dados com LINQ?

No último post vimos a moleza que é configurar o Entity e utilizá-lo. Nesse post veremos como fazer consultas simples utilizando o LINQ.

Utilizando o mesmo projeto do último post, faremos um filtro na coleção* de produtos que faz Bind* na grid de produtos.

Como o LINQ faz lembrar bastante o SQL, o Operador que faz filtro é o “Where”. 

Essa é a cara da grid que deixamos no último post e o código. 


protected void Page_Load(object sender, EventArgs e)
        {
            NORTHWNDEntities dc = new NORTHWNDEntities();

            gdvProdutos.DataSource = from p in dc.Products select p;
            gdvProdutos.DataBind();

        }

Vamos fazer um filtro que nos mostre apenas os produtos cujo CategoryID seja igual a 2. Abaixo segue a imagem da tela e o código modificado com o filtro:



protected void Page_Load(object sender, EventArgs e)
        {
            NORTHWNDEntities dc = new NORTHWNDEntities();

            gdvProdutos.DataSource = from p in dc.Products
                                     where p.CategoryID == 2
                                     select p;
            gdvProdutos.DataBind();

        }

Digamos agora que você caro leitor precise de apenas algumas das colunas da classe produtos. Como fazer para selecionar apenas as colunas necessárias?

Lançaremos mão de um recurso chamado de Classe Anônima que, assim como os métodos anônimos, são criados em tempo de execução.

Criação de classe anônima:

A classe comum é criada assim: Tipo teste1 = new Tipo(){ propriedade1 = 1, propriedade2 = 2}

Na classe anônima dispensamos a informação do Tipo apenas informamos o nome das propriedades e no nosso caso o valor virá do banco de dados.

select new { propriedade1, propriedade2, propriedade3}.

Essa é a cara da grid apenas com 3 propriedades e o código:


protected void Page_Load(object sender, EventArgs e)
        {
          NORTHWNDEntities dc = new NORTHWNDEntities();

          gdvProdutos.DataSource = from p in dc.Products
                                where p.CategoryID == 2
                                select new { p.ProductName, p.UnitPrice, p.QuantityPerUnit };

            gdvProdutos.DataBind();

        }


Por hoje é só!

Espero que tenham gostado e aprendido coisas novas!

Nenhum comentário:

Postar um comentário