LINQ to Objects

by Fabiano 20. março 2008 21:31

 

Acredito que com essa ferramenta (LINQ) a Microsoft conseguiu chegar muito mais perto de seu objetivo, de conseguir dar mais produtividade para o desenvolvimento ela vem tentando isso desde o VB 6, e nas primeiras versões da FrameWork .NET já tínhamos os DataSets tipados e outros approaches que eu não gosto muito, pela sua falta de transparência mais com o LINQ acredito que eles acertaram em cheio, pois ele bem utilizado melhora de mais a velocidade do desenvolvimento e uma característica muito interessante sobre ele é a legibilidade e facilidade de aprendizado que ele traz para o projeto como um todo, pois ele na sua base e simples de entender e um projeto todo baseado em LINQ fica mais simples. E não pensem quem terão códigos de baixa qualidade não porque e mais uma qualidade, códigos limpos e performáticos. Agora vamos falar de LINQ  To Objects.

LINQ to Objects

O termos LINQ to Objects se refere ao uso de queries LINQ em IEnumerable ou IEnumerable<T> que são o resultado de uma consulta LINQ em um XML ou SQL, e com isso você pode fazer consultas LINQ no resultado de suas consultas, mas com a utilização do NameSpace "System.Linq"  você poderá fazer consultas em qualquer de enumerable seja List<T>, Array, Dictionary<TKey, TValue> seja ela uma coleção que você definiu ou um retorno de uma consulta ao banco de dados por exemplo.

Basicamente o LINQ to Objects representa uma nova abordagem dobre como recuperar dados de uma coleção de objetos, pois sem ele teríamos sempre que fazer complexos foreach loops para poder especificar como queria o resultado de coleções, para poder formatar do jeito que correto seu retorno, com o LINQ to Objects você passa a escrever de forma declarativa o que deve se obter.

Alem disso as Queries LINQ oferecem três principais vantagens em relação às tradicionais foreach loops:

1.       Elas são mais concisas e legíveis, especialmente quando são muitas condições de filtragem.

2.       Elas fornecem poderosa filtragem, ordenação e agrupamento de capacidades com um mínimo de aplicação código.

3.       Eles podem ser levados para outras fontes de dados com pouca ou nenhuma modificação.

Em geral, quanto mais complexa a operação que deseja realizar sobre os dados, mais a vantagem que você vai perceber usando LINQ em vez das tradicionais técnicas de interação e isso vale para todas as abordagens do LINQ seja To SQL, XML ou Objects.

 

Agora vamos fazer uma serie de exemplos de como se utilizar o LINQ to Objects para obter melhores resultados em suas aplicações.

 

Criando queries LINQ em ArrayList:

using System;

using System.Collections;

using System.Linq;

 

namespace GenericLINQ

{

    public class Student

    {

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public int[] Scores { get; set; }

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            ArrayList arrList = new ArrayList();

            arrList.Add(

                new Student

                    {

                        FirstName = "Svetlana", LastName = "Omelchenko", Scores = new int[] { 98, 92, 81, 60 }

                    });

            arrList.Add(

                new Student

                    {

                        FirstName = "Claire", LastName = "O’Donnell", Scores = new int[] { 75, 84, 91, 39 }

                    });

            arrList.Add(

                new Student

                    {

                        FirstName = "Sven", LastName = "Mortensen", Scores = new int[] { 88, 94, 65, 91 }

                    });

            arrList.Add(

                new Student

                    {

                        FirstName = "Cesar", LastName = "Garcia", Scores = new int[] { 97, 89, 85, 82 }

                    });

 

            var query = from Student student in arrList

                        where student.Scores[0] > 95

                        select student;

 

            foreach (Student s in query)

                Console.WriteLine(s.LastName + ": " + s.Scores[0]);

 

            // Keep the console window open in debug mode.

            Console.WriteLine("Pressione qualquer tecla para sair.");

            Console.ReadKey();

        }

    }

}

 

/* Output: 
    Omelchenko: 98
    Garcia: 97
*/

 

 

Agora vamos fazer um exemplo em que criamos duas classes uma de Pessoa e a outra de Filho.

E com essas duas classes vamos fazer vários selects...


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ExemplosLinqtoObjects

{

 

    class Programw

    {

        static void Main2(string[] args)

        {

 

            //Alimentado lista de pessoas

            var pessoas = new List<Pessoa>

            {

                new Pessoa {Nome="Alexandre" , Idade=19}

                , new Pessoa {Nome="Mario" , Idade=20}

                , new Pessoa {Nome="Joao", Idade=25}

                , new Pessoa {Nome="Pedro", Idade=25}

            };

 

            var query = from p in pessoas

                        select p;

 

            foreach (var p in query)

            {

                Console.WriteLine("Nome: " + p.Nome);

            }

 

 

            var query2 = from p in pessoas

                         where p.Idade >= 20

                         select p;

 

            foreach (var p in query2)

            {

                Console.WriteLine("Nome: " + p.Nome);

            }

 

 

            var query3 = from p in pessoas

                         orderby p.Idade descending

                         group p by p.Idade into g

                         select new { idade = g.Key, total = g };

 

            foreach (var grupo in query3)

            {

                Console.WriteLine("Pessoas com:" + grupo.idade + " anos");

                foreach (var pessoa in grupo.total)

                {

                    Console.WriteLine(pessoa.Nome);

                }

            }

 

 

            var filhos = new List<Filho>

            {

                new Filho {Nome = "Alexandre Jr", nomePai="Alexandre"}

                , new Filho {Nome = "Alexandre Jr 2", nomePai="Alexandre"}

                , new Filho {Nome = "Joao Jr", nomePai="Joao"}

            };

 

            var query4 = from p in pessoas

                         join f in filhos

                         on p.Nome equals f.nomePai

                         select new { Pai = p.Nome, Filho = f.Nome };

 

            foreach (var i in query4)

            {

                Console.WriteLine("Pai: " + i.Pai + " Filho:" + i.Filho);

            }

 

 

            var query5 = from p in pessoas

                         join f in filhos

                         on p.Nome equals f.nomePai

                         group f by f.nomePai into g

                         select new { Pai = g.Key, Total = g };

 

            foreach (var i in query5)

            {

                foreach (var grupo in i.Total)

                {

                    Console.WriteLine(grupo.Nome);

 

                }

            }

 

            Console.Read();

 

        }

    }

 

    class Pessoa

    {

        public string Nome { get; set; }

        public int Idade { get; set; }

    }

 

    class Filho

    {

        public string Nome { get; set; }

        public string nomePai { get; set; }

    }

}

  

Note que a partir de uma lista de objetos conseguimos implementar uma serie de queries que com certeza vão facilitar em muito nossa vida. Tivemos muitos exemplos e com esse artigo fechamos a serie sobre LINQ espero ter conseguido passar todo o valor que esta ferramenta pode agregar ao nosso dia a dia...

 

Espero ter ajudado.

Bons Códigos...

 

Tags:

.Net

Comentários

31/8/2009 07:26:58 #

bad credit loans

ohhh nice info

bad credit loans | Reply

31/8/2009 07:27:07 #

bad credit loans

Please, can you PM me and tell me few more detailles about this, I am really fan of your web log...

bad credit loans | Reply

28/9/2009 21:56:23 #

bad credit loans

You are a very smart person!

bad credit loans | Reply

2/11/2009 15:52:07 #

fast payday loans

Thank you for your help!

fast payday loans | Reply

20/1/2010 18:54:24 #

Loans in Iowa

You have the power to change.

Loans in Iowa | Reply

1/4/2010 20:39:43 #

acai berry select

You need to be aware of what others are doing, applaud their efforts, acknowledge their successes, and encourage them in their pursuits. When we all help one another, everybody wins.

acai berry select | Reply

17/7/2010 14:40:14 #

payday loans

Give yourself something to work toward - constantly.

payday loans | Reply

18/8/2010 02:54:02 #

vigrx

your site layout is very good

vigrx | Reply

26/8/2010 17:27:09 #

Silver Bullion Coins

I really enjoy reading the articles on this blog. I'll bookmark this so I can read more later.

Silver Bullion Coins | Reply

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading



Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Fabiano Belmonte

Senior Architect, especialista em aplicações e-business com larga experiência em B2B (Submarino. Com e Saraiva.Com). Trabalha há 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas áreas: instituições financeiras (sistema SPB), e-commerce, gerenciamento logístico entre outras.