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.
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:
- Sintaxes de consulta e de método
- Projeções e Projeções anônimas
- Transformação de dados
- Operações em conjuntos
- Operações de ordenação
- Agregação e Agrupamento
- LinQ to Entities
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.
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!
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
Categoria de registros:
- Geral de clientes;
- Filtros de formas de pagamentos.
Categoria de cardápio
- Geral de produtos do cardápio;
- Itens do cardápio (com nome do produto);
- Itens do cardápio (nome e preço do produto);
- Itens do cardápio (nome e preço do produto no combo "Compre 4 e pague 3").
Categoria de pedidos
- Quantidade de itens de todos os pedidos do mês;
- Pedidos com um único item por mês;
- Pedidos com quantidades diferentes de itens.
Categoria cardápio - verificação de produtos:
- Presentes no cardápio da loja mas não no cardápio do delivery;
- Presentes nos dois cardápios (loja e delivery);
- Todos, de ambos os cardápios;
- Ordenação dos produtos do cardápio da loja por nome e preço.
Relatório carrinho de compras
- Todos os produtos do carrinho de compras;
- Valor total da compra;
- Número de produtos pedidos;
- Quantos produtos de cada foram pedidos.
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.
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}");
}
ID Nome Endereço Telefone 0d58b333-ff43-4050-bebd-40e06b4820fc Carlos Pereira Rua das Acácias, 567 (41) 98765-4321 1486fcaa-ffcd-454c-87f7-869b-bacd6fe2d8fd Fernanda Costa Avenida Independência, 890 (12) 12345-6789 ec93fdaf-7345-47ff-8acf-ff4a22857f0b Bruno Santos Rua da Liberdade, 112 (27) 98765-4321 81b509ab-ffaf-4de1-8bb4-e13d3db8a5b3 Camila Silva Avenida Central, 345 (16) 12345-6789 4bc8b012-f200-4f43-a33c-3eebde3690bf Gustavo Almeida Rua da Paz, 987 (18) 98765-4321 ca7559e7-1aff-4b27-b39e-4b15cf4f567f Ana Paula Rodrigues Rua dos Pinheiros, 234 (31) 98765-4321 e5bf18ea-1325-4ba4-a8df-6509fb86750b Rafael Oliveira Avenida 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.
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.
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.
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.
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));
ID Nome Endereço Telefone 97cf1e89-7825-4507-ac3c-77c37c356f90 Marcos Gomes Rua das Flores, 890 (11) 98765-4321 407c1d17-33a0-45ea-af8b-d8083bbc4b92 Amanda Costa Avenida Independência, 112 (12) 12345-6789 0c8f973f-3d9e-4c7c-8f3c-9281-1b391c38333d Victor Santos Rua da Liberdade, 345 (27) 98765-4321 0a72a744-e572-478a-90e1-e2bf1682039a Henrique Almeida Rua da Paz, 234 (18) 98765-4321 40cd7174-478b-4c3a-bb4b-4de1c8d90a6b Beatriz Silva Avenida 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.
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.
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.