.NET - LINQ - Operadores padrão de consultas.


E lá vou eu novamente falar sobre o LINQ , veja meus artigos anteriores sobre o assunto nos links abaixo:

LINQ - Language Integrated Query

O grande tchan do LINQ é que ela foi criada com o objetivo de simplificar consultas a informações na memória em coleções como listas e arrays, bem como informações armazenadas em base de dados , documentos XML , arquivos e outras fontes de dados. Ela realiza uma mapeamento objeto Relacional de forma que a o acesso a dados é feito através do framework LINQ e as instruções SQL são geradas implicitamente.

Usando o LINQ você não vai precisar conhecer SQL , XML , XPath, ADO .NET para acessar/atualizar dados pois após referenciar as classes LINQ e efetuar o mapeamento basta usar os recursos do framework LINQ para realizar as tarefas comuns conhecidas como CRUD (Create, Update, Delete).

Compare abaixo dois trechos de código com acesso a dados, o primeiro usando ADO .NET e o segundo usando LINQ:

1- ADO .NET

Dim c As SqlConnection = New SqlConnection(stringConexao)

c.Open()

Dim cmd As SqlCommand = New SqlCommand("SELECT p.ProductID, p.ProductName FROM Products p WHERE p.ProductName = @p0")
cmd.Parameters.AddWithValue("@p0", "Teste“)

Dim dr As DataReader = c.Execute(cmd)

While dr.Read()
   Dim ID As String = dr.GetString(0)
   Dim ProductName As String = dr.GetString
End While

2- LINQ To SQL

Dim db as new DataContext1()

Dim consulta = from p in db.Products where (p.ProductName=="Teste")
                     select new {p.ProductID,p.ProductName};

                     Me.GridView1.DataSource = consulta
                     Me.GridView1.DataBind()

O código ficou mais enxuto mais elegante, e , além da economia de código o LINQ continua fortemente tipado e usa os recursos do IntelliSense da plataforma .NET sendo que após efetuar o mapeamento usando as consultas LINQ você terá acesso aos campos da tabela de dados que foram mapeados sem precisar conhecer a sua estrutura de dados.

Neste artigo eu estou relacionando os principais operadores usados nas consultas LINQ de forma a ser um guia de referência e consulta para eventuais dúvidas.

1-)  Relação dos operadores padrão LINQ:

Operador Lazy ? Descrição
Aggregate No Aplica uma função a uma seqüência , originando um valor único
All No Aplica uma função a uma seqüência para verificar se todos os elementos satisfazem a função.
Any No Aplica uma função a uma seqüência para verificar se qualquer elemento satisfaz a função.
Average No Calcula a média de um seqüência numérica.
Concat Yes Produz a concatenação de duas seqüências S1 e S2.
Contains No Procura a seqüência para verificar se a mesma contem um dado elemento.
Count No Conta o numero de elementos em uma seqüência , originando um resultado inteiro.
DefaultIfEmpty Yes Data uma seqüência S, produz S ou a seqüência com o valor padrão se S estiver vazia.
Distinct Yes Retorna a seqüência com valores duplicados eliminados.
ElementAt No Retorna o i-ésimo elemento de uma seqüência.
ElementAtOrDefault No Retorna o i-ésimo elemento de uma seqüência se a seqüência ou o padrão se a seqüência estiver vazia.
Empty Yes Produz uma seqüência vazia.
EqualAll No Compara duas seqüências por igualdade.
Except Yes Dada duas seqüências S1 e S2, retorna o conjunto diferença S1 S2.
First No Retorna o primeiro elemento da seqüência.
FirstOrDefault No Retorna o primeiro elemento da seqüência, ou o valor padrão se a seqüência esta vazia.
GroupBy Yes Agrupa os elementos de uma seqüência pela chave.
GroupJoin Yes Realiza uma junção de duas seqüências S1 e S2 produzindo um resultado hierárquico.
Intersect Yes Dada duas seqüências S1 e S2, retorna o conjunto intersecção de S1 e S2
Join Yes Realiza uma junção tradicional interna de duas seqüências S1 e S2.
Last No Retorna o último elemento de uma seqüência.
LastOrDefault No Retorna o último elemento de uma seqüência ou o valor padrão se a seqüência estiver vazia.
LongCount No Conta o número de elementos em uma seqüência, produzindo um resultado do tipo long.
Max No Retorna o valor máximo de uma seqüência.
Min No Retorna o valor mínimo de uma seqüência
OfType Yes Produz os elementos de uma seqüência que coincide com um dado tipo.
OrderBy Yes Ordena uma seqüência de elementos pela chave na ordem ascendente.
OrderByDescending Yes Ordena uma seqüência de elementos pela chave na ordem descendente.
Range Yes Produz uma seqüência de inteiros em um dado intervalo.
Repeat Yes Produz uma seqüência de valores pela repetição de um dado valor n vezes.
Reverse Yes Inverte os elementos de um seqüência.
Select Yes Aplica a função de projeção a uma seqüência , originando uma nova seqüência.
Single No Retorna o único elemento de um seqüência única.
SingleOrDefault No Retorna o único elemento de uma seqüência , ou valor padrão se estiver vazia.
Skip Yes Pula o primeiro elemento de uma seqüência , produzindo os elementos restantes.
SkipWhile Yes Data uma função F e seqüência S, pula os elementos iniciais de S onde F é verdadeira.
Sum No Calcula a soma de uma seqüência numérica.
Take Yes Produz os primeiros n elementos de uma seqüência.
TakeWhile Yes Dada uma função F e uma seqüência S, produz os elementos iniciais de S onde F for verdadeira.
ThenBy Yes Toma uma seqüência ordenada e produz uma secundária , na ordem ascendente.
TheyByDescending Yes Toma uma seqüência ordenada e produz uma secundária , na ordem descendente.
ToArray No Percorre uma seqüência, capturando os resultados em um array.
ToDictionary No Percorre uma seqüência, capturando os resultados em um Dictionary<K, V>.
ToList No Percorre uma seqüência, capturando os resultados em uma List<T>.
ToLookup No Percorre uma seqüência, capturando os resultados em um Lookup<K, IEnumerable<V>>.
ToSequence Yes Converte uma seqüência em uma seqüência IEnumerable para usar com consulta padrão.
Union Yes Dada duas seqüências S1 e S2 retorna o conjunto união de S1 e S2.
Where Yes Aplica uma função Booleana a uma seqüência, produzindo uma sub-seqüência.

Obs: Lazy é um atributo que significa 'quanto mais tarde melhor' e tem o objetivo de carregar um item sob demanda. (Lazy Loading)

2-) Relação dos operadores padrão usados nas consultas LINQ

Operador Descrição
OfType

Filtro baseado na afiliação do tipo

Select/SelectMany Projeção baseada na função de transformação
Where Filtro baseado na função de predicação
Count Contagem baseada em função de predicação opcional
All/Any Quantificação universal/existencial baseada na função de predicação
First/FirstOrDefault Membro inicial de acesso com base em função de predicação opcional
ElementAt Membro de acesso em posição especificada
Take/Skip Membros de acesso antes/depois de posição especificada
TakeWhile/SkipUntil Membros de acesso antes/depois que uma função de predicado é satisfeita
GroupBy Partição baseada em função de extração de chave
ToDictionary Cria dicionário de chave/valor com base em função de extração de chave
OrderBy/ThenBy Classificação em ordem ascendente com base em função de extração de chave e função de comparação opcional
OrderByDescending/
ThenByDescending
Classificação em ordem descendente com base em função de extração de chave e função de comparação opcional
Reverse Inverte a ordem de uma seqüência
Fold Agrega valor sobre múltiplos valores com base na função de agregação
Min/Max/Sum/Average Funções de agregação numéricas
Distinct Filtra membros duplicados
Except Filtra elementos que são membros do conjunto especificado
Intersect Filtra elementos que não são membros do conjunto especificado
Union Combina membros distintos de dois conjuntos
Concat Concatena os valores de duas seqüências
ToArray/ToList Colocam em buffer os resultados de consulta em array ou List<T>
Range Cria uma seqüência de números em um intervalo
Repeat Cria uma seqüência de múltiplas cópias de um determinado valor

Aguarde em breve mais artigos sobre LINQ ...


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 


Referências:


José Carlos Macoratti