quarta-feira, 13 de outubro de 2010

LinqPad4: Ferramenta free de consultas Linq também funciona no Azure Tables!!!

Então. Estava eu precisando debugar uma consulta Linq que a aplicação estava mandando pro Development Storage do Azure. Coloquei um breakpoint em cima da danada, e na hora que não veio o que eu queria, copiei ela pro clipboard e joguei na Watch1 pra poder alterar seu texto e ver o resultado desta alteração. Mas a janela de Watch não gostou do Linq na expressão: Expression cannot contain query expression.

image

Na Immediate Window, mesma coisa. Como ganhei um bônus de 2 dias no prazo da próxima entrega do projeto, fui procurar alguma ferramenta que me permitisse escrever e executar uma consulta Linq no Azure Tables. E aí achei o LinqPad4.

O LinqPad4 deixa você escrever um programa em uma linguagem (na versão 4 ele suporta C#, VB.NET, F# e SQL), e executa este programa na conexão de dados que você especificou. Ele contém funcionalidades que permitem ver o resultado de consultas Linq. E permite você declarar variáveis, colocar referência a assemblies, e incluir namespaces. Então ficou fácil fazer com que ele consulte o Azure Tables:

  1. Se vou fazer uma consulta Linq nas tabelas no Azure Tables, preciso instanciar a classe que serve como contexto de acesso às tabelas. Então na janela das propriedades da consulta (Query > Query Properties), coloco uma referência ao assembly que tem minha classe de contexto de dados (“Projeto1”.AcessoDados.dll, na figura – os personagens usam nomes fictícios pois nosso cliente tem muito carinho pelo nome fantasia que ele bolou para o produto):
    image
  2. Ainda nessa janela, na tab “Additional Namespace Imports” coloco namespaces que vou usar na consulta – a mesma funcionalidade do using do C#.

E pronto! Agora posso escrever e executar consultas Linq nas tabelas do Development Storage:

image

Explicando o código:

Linha 1: Preciso dos dados de conexão com o Development Storage. Eles estão em Microsoft.WindowsAzure.CloudStorageAccount.DevelopmentStorageAccount.

Linha 2: Preciso instanciar a classe de contexto da aplicação, informando como ela deve se conectar ao Azure. Para consultar as tabelas no Development Storage, crio uma instância da minha classe de contexto usando a assinatura
ContextoDados(string baseAddress, Microsoft.WindowsAzure.StorageCredentials credentials). Esta assinatura está presente na minha classe de contexto pois é herdada de Microsoft.WindowsAzure.StorageClient.TableServiceContext.

Linhas 3-6: É a consulta Linq.

Linha 7: O LinqPad tem uma funcionalidade de escrever um List<T> como uma tabela no painel “Results”, o que permite você visualizar de forma fácil e rápida o resultado da consulta Linq.

O site do LinqPad é http://www.linqpad.net. Tem versões para o Framework 3.5 e 4.0, e é for free.