Início > LINQ > LINQ to DataSet

LINQ to DataSet

O LINQ é uma linguagem que utilizamos para realizar consultas em um fonte de dados. Existem LINQ to XML (para XML), LINQ TO SQL (para SQL Server) e também existe o LINQ to DataSet, que é o exemplo que pretendo explicar hoje.

O que seria LINQ to DataSet? Apenas uma consulta LINQ em um DataSet, verdade que existem algumas limitações, porém é uma possibilidade que poderá ser útil em algumas situações. Vamos criar um exemplo, vou usar um projeto do tipo WPF Application, vamos colocar na tela um Data Grid, um Button e um ComboBox, como a figura abaixo:

Criei o combo box com três opções: Todos, Diretor e Programador. A idéia é criar um DataSet com alguns colaboradores e realizar o filtro pelo cargo.

Crie um método chamado CarregarDataSet que retorne um DataSet conforme código abaixo:

        private DataSet CarregarDataSet()
        {
            DataSet ds = new DataSet();

            DataTable dt = new DataTable("COLABORADORES");

            dt.Columns.Add("NOME");
            dt.Columns.Add("CARGO");

            DataRow dr = dt.NewRow();

            dr["NOME"] = "Pedro";
            dr["CARGO"] = "Diretor";

            dt.Rows.Add(dr);

            dr = dt.NewRow();

            dr["NOME"] = "Marcos";
            dr["CARGO"] = "Programador";

            dt.Rows.Add(dr);

            ds.Tables.Add(dt);

            return ds;
        }

Estamos aqui criando um DataTable com duas colunas, populando esse DataTable com dois registro e por fim adicionamos o DataTable dentro do DataSet.

Agora vamos criar o evento do botão pesquisar (OnClick), veja o código abaixo:

            DataSet ds = CarregarDataSet();

            string strCargo = this.cmbProfissao.Text;

            var query = from p in ds.Tables["COLABORADORES"].AsEnumerable()
                        where p.Field("CARGO") == (strCargo != "Todos" ? strCargo : p.Field("CARGO"))
                        select p;

            this.dgColaboradores.ItemsSource = query.AsDataView();

Vamos as explicações.

1º Passo:

Criamos um DataSet e chamamos o métodos CarregarDataSet que irá devolver um DataSet populado conforme explicamos anteriormente.

2º Passo:

Criamos um variável o tipo anonymous e realizamos o LINQ to DataSet

Aqui primeiro passo foi definir qual a tabela do DataSet que vamos utilizar, no caso a de colaboradores (ds.Tables[“COLABORADORES”]).

Depois colocamos o AsEnumerable(), isso porque a classe DataTable não implementa a Interface IEnumerable e IQueryable e então o objeto DataTable não pode ser usado diretamente na consulta, temos que usar o AsEnumerable para que seja gerado um IEnumerable composto pelas linhas do DataTable.

3º Passo

No where utilizamos p.Field(“CARGO”), é necessário utilizar o Field para especificar os o tipo da coluna de DataTable que vamos gerenciar, no nosso exemplo a coluna chama CARGO e é do tipo string. Caso a coluna do DataTable aceite valor null, temos que trabalhar com p.Fiedl<string?>.

4º Passo

Para finalizar utilizamos query.AsDataView(), esse método proporciona uma visão padrão de tabela. Como utilizamos um tipo anonymous, foi necessário chamar esse método para que o datagrid interpretasse os registros.

Execute a aplicação e veja o resultado conforme imagem abaixo:

Obrigado e até a próxima.

Anúncios
Categorias:LINQ Tags:, ,
  1. julho 8, 2011 às 12:12 am

    Parabéns Marquinhos….Bem didatico!!!!

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: