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 JoseOlá 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.