.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") |
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
NET - LINQ a seu dispor - Sintaxe e Operadores - Macoratti ...
http://www.microsoft.com/brasil/msdn/Tecnologias/arquitetura/LINQ.mspx
LINQ - http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx