Desenvolvimento - C#

Trabalhando com Linq To XML parte 2: Linq vS Lambda Expression

No artigo o autor ensina como fazer CRUD com linq to xml e como utilizar Linq e lambda Expression.

por Emerson Jose



Olá pessoal, continuando a série de artigos sobre XML utilizando a tecnologia Linq To XML, o artigo de hoje vai abordar como fazer um CRUD (selecionar, Atualizar, Excluir), existe uma novidade.

Vamos aborda a tecnologia Lambda Expression aonde vamos perceber que é possível economizar muito código Linq.Para desenvolvimento do artigo estou utilizando aplicação console.

Obs:  É preciso ler o primeiro artigo, para não ter duvidas de como gerar a estrutura XML utilizada nos exemplos.

Antes de começar a desenvolver os exemplos é preciso carregar a estrutura XML como mostra o exemplo abaixo utilizando XDocument Load.

string path = "D:\\DataTeste.xml";           

XDocument documento = XDocument.Load(path);

//Linq

var query = (from c in documento.Descendants("item") select c).FirstOrDefault();

//Lambda Expression

var query = documento.Descendants("item").FirstOrDefault();

Resultado.

<item>

  <pessoa name="Emerson" idade="20" />

  <pessoa name="Angelica" idade="21" />

</item>

Definição: Quando executado o exemplo acima vai imprimir na tela a estrutura inteira do arquivo,  executando com linq ou lambda expression conseguimos ter o mesmo resultado.

//Linq

var query = (from c in documento.Descendants("pessoa") select new { name = c.Attribute("name").Value });

//Lambda Expression

var query = documento.Descendants("pessoa").Select(b => new { name = b.Attribute("name").Value });

Resultado:

Emerson

Angelica

Definição: No exemplo selecionamos o atributo name do nô pessoa.

//Linq

var query = (from c in documento.Descendants("pessoa")

                   where (string)c.Attribute("name").Value == "Angelica"

                 select new { name= c.Attribute("name").Value }).FirstOrDefault();

//Lambda Expression

var query = documento.Descendants("pessoa").Select(r=>

          new{name = r.Attribute("name").Value}).FirstOrDefault(r => (string)r.name == "Angelica");

Definição: O exemplo que fizemos agora foi where utilizando linq e outro com lambda podemos perceber que em alguns casos o código fica quase na mesma

proporção e acaba não sendo vantajoso.

// update

var query = (from c in documento.Descendants("pessoa")

                   where (string)c.Attribute("name").Value == "Angelica"

                select new { name = c.Attribute("name") }).FirstOrDefault();

if (query != null)

{

          query.name.SetValue("Eder");

}

documento.Save("D:\\DataTeste.xml");

Definição: Para realizar o update é preciso fazer um select para retorna um conteúdo e ver se o mesmo existe,caso seja diferente de null podemos atribuir os novos valores para os campos e realizar um save para substituir o arquivo existente pelo novo.  

//Delete

 var query = (from c in documento.Descendants("pessoa")

                         where (string)c.Attribute("name").Value == "Angelica"

                         select new { name = c.Attribute("name") }).FirstOrDefault();

            if (query != null)

            {

                query.name.Remove();

            }

            documento.Save("D:\\DataTeste.xml");

Definição: A exclusão e quase igual o update precisamos informa o elemento que queremos excluir,diferente da exclusão na base de dados o xml exclui um nó como um todo.

Espero que tenham gostado qualquer duvida não deixe de comentar valeu galera.

Emerson Jose

Emerson Jose - Analista Programador Jr. em ASP.NET na linguagem c#, trabalha na linguagem a um ano e meio desenvolvendo artigos para seu blog http://programmingcsharp.wordpress.com e trabalha em uma consultoria na região de São Paulo.