Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso C# LINQ: explorando ferramentas de consulta

C# LINQ: explorando ferramentas de consulta

Sintaxes do LINQ - Apresentação

Olá, estudante! Boas-vindas ao curso de LinQ!

Eu sou Jennifer Bittencourt, instrutora na Escola de Programação, mas se preferir, pode me chamar de Jenni. Estarei acompanhando você durante este conteúdo.

Audiodescrição: Jennifer se declara como uma mulher branca, com cabelos ondulados na altura dos ombros, pintados na cor azul turquesa. Usa óculos de armação preta e redonda, brincos prateados e uma camisa cinza claro com desenhos amarelos de fórmulas matemáticas. Está sentada em uma cadeira gamer de encosto preto e à sua frente tem um microfone também preto. No fundo, uma parede está iluminada por luzes LED verde e azul e, ao lado direito, tem uma estante com itens de decoração.

O que aprenderemos

Durante este curso, aprenderemos sobre algumas aplicações do LinQ. Conheceremos as sintaxes de consulta e método utilizadas no LinQ e aplicaremos projeções e projeções anônimas para consulta de dados.

Também utilizaremos a transformação de dados para retornar um resultado de consulta única e realizaremos operações de conjunto, manipulando dados presentes em uma ou mais fontes de dados. Além disso, aplicaremos operações de ordenação, agregação e agrupamento. Por fim, aplicaremos o LinQ to Entities no contexto de banco de dados.

O que aprenderemos:

O projeto

Tudo isso será aprendido utilizando o projeto Serenatto, uma cafeteria em desenvolvimento. Focaremos na parte administrativa da cafeteria, com dados de produtos, clientes, cardápio e outras informações que fazem parte desse contexto de negócio.

Pré-requisitos

Para que você aproveitar melhor o conteúdo deste curso, é importante que já tenha conhecimento em C- Sharp (C#), .NET e Entity Framework, e esteja buscando se aprofundar em tópicos avançados da linguagem.

Antes de prosseguir para o próximo vídeo, temos um recado importante. Este curso não é composto apenas pelas videoaulas. É fundamental que você realize as atividades de apoio, com materiais extras e atividades práticas, que ajudarão a fixar os conhecimentos e praticar tudo o que está sendo aprendido durante as aulas.

Além disso, você pode contar sempre com o apoio, através do fórum do curso e do Discord da Alura. Nesses espaços você consegue tirar suas dúvidas e trocar ideias com outras pessoas que também estão fazendo este curso com você.

Então, já pode pegar um café, uma água, se ajeitar na cadeira e bons estudos!

Sintaxes do LINQ - Listando dados com LINQ

Nós, do time de desenvolvimento do Serenatto, recebemos uma tarefa da administração: preparar o acesso a dados e algumas informações que serão utilizadas em relatórios internos da empresa. Para isso, temos uma lista de relatórios que precisamos elaborar.

Relatórios Serenatto

Explorando o projeto da Serenatto

Começaremos abrindo o projeto inicial do Serenatto no Visual Studio. Há uma atividade, antes desse vídeo, com todo o processo de preparação do ambiente e com o projeto disponível para download, permitindo que todos acompanhem conosco.

No projeto inicial do Serenatto, temos algumas informações. Na coluna da esquerda, encontramos os diretórios "Dados", com os dados que utilizaremos, e "Modelos", com as informações padrão dos nossos modelos de negócio.

A princípio, trabalharemos com os dados em memória. Esses dados podem ser acessados através do diretório "Dados". Por exemplo, podemos abrir o arquivo DadosClientes.cs, onde encontramos vários dados de clientes do Serenatto, ou seja, pessoas que já realizaram alguma compra e estão registradas em nossa base de dados.

Criando o primeiro relatório

O primeiro relatório trabalharemos para Serenatto é o relatório geral de clientes. Precisamos retornar a lista com todos os dados dos clientes que já compraram alguma vez, e estão na nossa base de dados.

No Visual Studio, acessamos o arquivo Program.cs e adicionaremos as informações dos clientes em uma lista, para podermos acessar e manipular esses dados.

Arquivo Program.cs

using SerenattoEnsaio.Dados;

IEnumerable<Cliente> clientes = DadosClientes.GetClientes().ToList();

O código acima cria uma lista de clientes a partir dos dados disponíveis, a partir da importação de DadosClientes. Para isso, utilizamos o método ToList(), que já conhecemos de outros cursos da Alura.

O tipo <Cliente> está apresentando um erro, porque precisávamos referenciar nossos modelos. Clicando nele com o botão direito e fazendo a importação, corrigimos o erro e podemos exibir esses dados no console. Para organizar, fazemos um Console.WriteLine("RELATÓRIO DE DADOS CLIENTES").

using SerenattoEnsaio.Dados;
using SerenattoEnsaio.Modelos;

IEnumerable<Cliente> clientes = DadosClientes.GetClientes().ToList();

Console.WriteLine("RELATÓRIO DE DADOS CLIENTES");

Agora, podemos fazer um foreach() na nossa lista para imprimir os resultados que queremos exibir, os dados do cliente, aproveitando as sugestões do Visual Studio. Interpolaremos as informações de cada cliente da forma que queremos exibir, com Id, Nome, Endereco e Telefone. Para separar essas informações, usaremos o |.

// código omitido

Console.WriteLine("RELATÓRIO DE DADOS CLIENTES");
foreach (var cliente in clientes)
{
    Console.WriteLine($"{cliente.Id} | {cliente.Nome} | {cliente.Endereco} | {cliente.Telefone}");
}
IDNomeEndereçoTelefone
0d58b333-ff43-4050-bebd-40e06b4820fcCarlos PereiraRua das Acácias, 567(41) 98765-4321
1486fcaa-ffcd-454c-87f7-869b-bacd6fe2d8fdFernanda CostaAvenida Independência, 890(12) 12345-6789
ec93fdaf-7345-47ff-8acf-ff4a22857f0bBruno SantosRua da Liberdade, 112(27) 98765-4321
81b509ab-ffaf-4de1-8bb4-e13d3db8a5b3Camila SilvaAvenida Central, 345(16) 12345-6789
4bc8b012-f200-4f43-a33c-3eebde3690bfGustavo AlmeidaRua da Paz, 987(18) 98765-4321
ca7559e7-1aff-4b27-b39e-4b15cf4f567fAna Paula RodriguesRua dos Pinheiros, 234(31) 98765-4321
e5bf18ea-1325-4ba4-a8df-6509fb86750bRafael OliveiraAvenida Paulista, 1567(11) 12345-6789

(omissão da continuação da tabela)

Para executarmos o código, clicamos no botão com o sinal de execução e o nome "Serenatto", menu superior. Assim, conseguimos visualizar o relatório de dados dos clientes, retornando corretamente as informações de Carlos Pereira, Bruno Santos, Camila Silva, entre outros.

Por trás do código

O que fizemos foi utilizar o ToList() para listar os dados dos clientes que estavam na nossa base. Já conhecemos esse método de outros cursos da Alura. O que ainda não exploramos é que ele é uma extensão da linguagem LinQ (Language Integrated Query - Query de Linguagem Integrada).

O LinQ é um conjunto de tecnologias baseado na integração de recursos de consulta na linguagem C#. Ele nos fornece uma experiência de consulta mais robusta, aplicável a várias fontes de dados diferentes, como documentos XML, bancos de dados e fontes de dados em memória, entre outros.

Com o LinQ, conseguimos utilizar uma consulta única para diversas fontes de dados, sem precisarmos aprender a linguagem específica de cada uma, porque usamos apenas C#. Além disso, temos as vantagens de escrever menos código e verificar erros em tempo de compilação, já que o Visual Studio nos ajuda a identificar erros. Ele também fornece métodos para diferentes operações nas consultas, como filtro e ordenação.

Neste vídeo, entendemos o que é o LinQ e que ele já faz parte do nosso fluxo de desenvolvimento. Surge a questão: será que conseguimos utilizar o LinQ para fazer consultas mais complexas, filtros e ordenações?

É isso que exploraremos nos próximos vídeos.

Sintaxes do LINQ - Sintaxe de consulta

Nós já começamos a elaborar os relatórios solicitados pelo Serenatto. No vídeo anterior, criamos o relatório geral de clientes. O próximo relatório solicitado é o de filtros de formas de pagamento. Abriremos o Visual Studio para construirmos esse relatório.

Relatório para filtros de formas de pagamento

No Visual Studio, acessamos o gerenciador de soluções, na lateral esquerda. Dentro no diretório "Dados", encontramos o arquivo DadosFormaDePagamento.cs, com as informações sobre formas de pagamento: crédito, débito, PIX e dinheiro. Utilizaremos essas informações para criar nosso relatório.

De volta ao arquivo Program.cs, faremos algo semelhante ao que fizemos com os dados dos clientes: salvaremos as informações em uma variável para acessá-las. Portanto, abaixo da nossa lista clientes, criaremos a lista formasPagamento para armazenarmos essas informações, que estão em forma de String.

Arquivo Program.cs

IEnumerable<Cliente> clientes = DadosClientes.GetClientes().ToList();
IEnumerable<string> formasPagamento = DadosFormasPagamento.FormasPagamento;

Console.WriteLine("RELATÓRIO DE DADOS CLIENTES");
foreach (var cliente in clientes)
{
    Console.WriteLine($"{cliente.Id} | {cliente.Nome} | {cliente.Endereco} | {cliente.Telefone}");
}

O próximo passo é começar a construir o relatório. Podemos aproveitar o título do relatório anterior, copiando a linha do Console.Writeline() e colando no final do código. Para melhorar a visualização, antes do novo relatório, adicionaremos um Console.WriteLine("---------------------------"), com traços para dividir os relatórios.

Construindo o formato do novo relatório

No nome do relatório, substituiremos o título para ("RELATÓRIO DE FORMAS DE PAGAMENTO"). Precisamos consultar as formas de pagamento pelo nome e aplicar filtros para retornar apenas as formas desejadas. Para isso, criaremos uma variável chamada pesquisa para armazenar o resultado da pesquisa.

//código omitido

Console.WriteLine("RELATÓRIO DE DADOS CLIENTES");
foreach (var cliente in clientes)
{
    Console.WriteLine($"{cliente.Id} | {cliente.Nome} | {cliente.Endereco} | {cliente.Telefone}");
}

Console.WriteLine("---------------------------")
Console.WriteLine("RELATÓRIO DE FORMAS DE PAGAMENTO");
var pesquisa = from p in FormasPagamento
               where p.Contains('c')
               select p;

Utilizaremos a sintaxe de consulta do LinQ para realizar essa pesquisa. A pesquisa buscará todas as formas de pagamento que contêm a letra "C". Essa busca não se limita à letra inicial, mas, para nosso propósito, é suficiente. O último passo é exibir os dados resultantes da pesquisa, com o select p.

Após esse código Visual Studio sugere o uso de Console.WriteLine() para exibição. Utilizaremos string.Join() para separar os resultados da pesquisa por espaço.

// código omitido

Console.WriteLine("---------------------------")
Console.WriteLine("RELATÓRIO DE FORMAS DE PAGAMENTO");
var pesquisa = from p in FormasPagamento
               where p.Contains('c')
               select p;

Console.WriteLine(string.Join(" ", pesquisa));
IDNomeEndereçoTelefone
97cf1e89-7825-4507-ac3c-77c37c356f90Marcos GomesRua das Flores, 890(11) 98765-4321
407c1d17-33a0-45ea-af8b-d8083bbc4b92Amanda CostaAvenida Independência, 112(12) 12345-6789
0c8f973f-3d9e-4c7c-8f3c-9281-1b391c38333dVictor SantosRua da Liberdade, 345(27) 98765-4321
0a72a744-e572-478a-90e1-e2bf1682039aHenrique AlmeidaRua da Paz, 234(18) 98765-4321
40cd7174-478b-4c3a-bb4b-4de1c8d90a6bBeatriz SilvaAvenida Central, 987(16) 12345-6789

RELATÓRIO DE FORMAS DE PAGAMENTO

crédito

Executando esse código, clicando no botão "Serenatto" na parte superior, além do relatório de dados de clientes, recebemos o relatório de formas de pagamento retornando apenas a opção "crédito". Ao verificarmos a lista de formas de pagamento, confirmamos que apenas "crédito" contém a letra "C", validando nossa pesquisa.

Por trás do código

Para esse relatório, usamos a sintaxe de consulta, uma sintaxe padrão do LinQ que permite realizar consultas nos nossos dados. Ela segue o mesmo fluxo sempre que precisarmos utilizá-la.

Começamos com a inicialização (from), onde informamos onde os dados serão buscados. Em seguida, temos a condição (where), que indica como os dados devem ser buscados. Por fim, temos o retorno da seleção dos dados (select), ou seja, o resultado da busca.

Essa sintaxe nos permite realizar consultas de forma declarativa e legível, utilizando palavras-chave como critério de busca. Idealmente, quem gera o relatório que deveria escolher o critério de busca, mas usamos um critério fixo nesse exemplo para fins didáticos.

Porém, a seguir terá uma atividade prática para testar outras formas para realizar essa consulta e permitir que a pessoa usuária defina o critério desejado.

Depois da atividade, continuaremos explorando outras sintaxes do LinQ.

Sobre o curso C# LINQ: explorando ferramentas de consulta

O curso C# LINQ: explorando ferramentas de consulta possui 111 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas