Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso VB.NET com Windows Forms Parte 9: Lambda Expressions, LINQ e Dataset

VB.NET com Windows Forms Parte 9: Lambda Expressions, LINQ e Dataset

IComparer e CompareTo - Introdução

Oi, gente, tudo bem? Meu nome é Victorino Vila e vamos ver mais um treinamento de visual basic .net. Esse treinamento é uma sequência de uma série de outros treinamentos que vimos e cada vez mais vamos nos aprofundando dentro dessa linguagem construindo problemas um pouco mais complexos.

Nesse treinamento vamos continuar em um assunto que vem de dois treinamentos atras. São estruturas internas do visual basic para gravar dados em conjunto. Vimos a estrutura list, a dictionary, a insert, e várias maneiras de manipular essas estruturas.

Neste curso específico vamos terminar de ver métodos de ordenação de listas usando uma interface chamada ICompare. E também veremos como posso ordenar e fazer filtros para buscar informações de uma lista de componentes, de objetos, usando o que chamamos de expressões Lambda. Veremos que podemos juntar uma série de funcionalidades usando expressão Lambda e chamamos esse conjunto de expressões LINQ.

Depois desse assunto terminado, vamos dar um pulo e vamos ver outra estrutura dentro do visual basic .net que considero uma das mais poderosas, que é a de dataset e data table. Vamos ver que dataset é como se fosse um banco de dados, mas não um banco de dados que está gravado em disco na sua máquina. É um banco de dados que crio em memória, instancio esse objeto que vamos chamar de dataset.

Dentro do dataset podemos ter um ou mais data tables, seria equivalente às tabelas. Vamos ver que podemos criar relacionamentos entre elas, chaves estrangeiras, chaves primárias, fazer uma série de coisas com a estrutura data table que nos auxilia a manipular dados pelo visual basic .net.

Se você não conhece nada de banco de dados, não se preocupe. No momento em que eu for dar o dataset vou falar conceitos importantes. Nos data tables vamos aprender a criar, criar colunas, ordenar, filtrar informações deles. Fazer uma série de manipulações.

Depois, não necessariamente na ordem que estou falando, vamos construir uma aplicação do nosso banco Bytebank onde vamos cadastrar contas correntes dentro de uma lista e depois excluir e ordenar por determinados critérios.

Vamos fazer essa aplicação usando lista e dataset. Por exemplo, aqui em cima vou ter dentro do menu minha aplicação usando lista e depois a mesma aplicação usando dataset, e claro, na aplicação vamos poder criar uma conta corrente, e vamos poder excluir um conjunto de contas correntes e verificar de forma ordenada.

Quando formos construir essa aplicação vamos ter que aprender uma série de novos componentes do Windows forms, como list view e a barra de ferramentas, o tool bar.

São várias coisas que vamos aprender neste curso. Se preparem, obrigado por estar me assistindo e vamos seguindo nesse treinamento.

IComparer e CompareTo - Relembrando o IComparable

Vamos começar mais esse treinamento. Primeiro, vamos baixar para a nossa máquina o resultado do projeto do treinamento anterior e a partir dele vamos começar a ver novos conceitos do visual basic .net. Vou fazer o download do arquivo zip que está no link deste vídeo, e vou ter aqui meu arquivo baixado. Vou transferir para o diretório onde vou trabalhar meu projeto e vou descompactar.

Dentro do diretório Bytebank, que estava dentro do arquivo compactado, vou abrir o arquivo Bytebank.sln, que é a solução do nosso projeto. Pronto, temos nosso projeto com todas as classes, aplicações. A partir desse projeto que a gente vai seguir com o treinamento.

Vamos relembrar a interface chamada IComparable, que vimos no curso anterior e permite que a gente possa colocar uma lista de classes usando um critério de ordenação.

Vou pegar meu frm teste lista e vou criar um novo botão 6. Dentro do código dele, a gente vai implementar um exemplo para relembrar como funcionava a interface IComparable. Relembrando também que na nossa classe conta corrente que está dentro de classes cliente nós implementamos a interface IComparable e tivemos que incluir o código compare to, onde defino o critério de ordenação que quero usar. Aqui no caso estou usando nome do correntista.

Para a gente poder melhorar nosso exemplo, na nossa função to string, quando exibimos uma conta corrente, mostrando agência, conta e nome do titular. Vou acrescentar uma propriedade que vai ser exibida quando eu quiser visualizar nossa classe conta corrente, que vai ser o saldo. Vou escrever saldo, dentro do colchetes coloco a propriedade saldo. Coloco dois pontos do lado. Ficou agência, conta igual a conta, nome igual titular e saldo vou colocar um toString para não dar problema, porque é um double, e como estou querendo exibir ele vou colocar o toString para evitar problemas.

Vou agora para o meu frm teste lista e no código vou criar três variáveis que vão instanciar três classes de conta corrente. Aqui dentro vou colocar código da agência, número da conta e nome do titular. Vou colocar conta 1, depositar, é o método depositar, que a gente deposita um dinheiro dentro da conta corrente, e vou depositar 10 mil reais.

Vou repetir e colocar mais duas contas, o 2, que vai ter outro número, mas vai ser o Pedro, com 5 mil reais. Na conta 3 vou colocar outro critério, que vai ser o Alberto, só que ele tem 7 mil reais.

Vou criar agora uma lista contas correntes as new list of conta corrente. E claro, vou adicionar na minha lista essas três contas correntes. Lista conta corrente add conta 1, vou adicionar a conta 2, e vou adicionar a conta 3. Vou colocar o message box, com um texto antes dizendo lista de contas original e vou concatenar com meu string join onde defino um separador e minha lista contas correntes.

Claro que aqui ele vai usar automaticamente a função toString e vai exibir não somente a conta, mas agência, conta, nome e saldo. A gente implementou isso agora. Primeiro a gente vai visualizar essa informação, vou salvar, me certificar no Bytebank sistema agência, botão direito do mouse, propriedades, e vou trocar o formulário principal para o frm teste lista, para abrir o formulário onde implementamos o botão. Vou salvar e executar.

Temos os botões, se eu clicar em botão 6 estou vendo a agência conta, nome e saldo. Depois tenho a segunda e terceira conta na ordem natural da lista, ou seja, primeiro estou vendo o primeiro elemento que adicionei na lista, o segundo é o segundo, e assim por diante.

Vamos voltar para o nosso código. Relembrando, se eu por acaso pegar minha lista contas correntes e der sort vou ordenar essa lista, usando o critério definido na função compare to, que implementa a função compare to da minha interface IComparable. E aqui no caso estamos usando como critério o nome do titular da conta com o critério de ordenação das minhas classes.

Se eu voltar para a implementação, após executar o sort, se eu quiser exibir de novo a lista das minhas classes, vou escrever aqui lista de contas ordenada por nome, e aí vamos ver como fica.

A primeira conta é o João, a segunda a do Pedro e a terceira do Alberto. Claro que estão na ordem natural. Se eu clicar em ok vejo minhas contas correntes primeiro a do Alberto, depois a do João, e finalmente do Pedro. Ou seja, usando como critério a ordem alfabética.

Isso tudo já vimos no curso anterior. Quis dar uma revisão para mostrar para vocês como implementamos essa ordem. Agora, digamos que ao invés de olhar as contas correntes e ordenar por nome eu queira ordenar pelo saldo, quero ir do menor para o maior.

É muito simples, vou em conta corrente, ao invés de usar o return que compara o nome da classe que estou instanciando com o nome da classe sendo passada como parâmetro do compare to, vou copiar esse cara, colocar um comentário para não perder o código. Ao invés de olhar pelo titular nome, vou olhar pelo saldo, e a outra conta também.

Agora meu critério do IComparable mudou. Ele está comparando saldos. Vou salvar e executar. Vejo as contas correntes em primeiro lugar o Pedro que tem saldo 100, segundo o Alberto com saldo 7.100 e depois o João com saldo 15.100.

Eu inclusive inicializei errado. Aqui tem que ser conta 2. Vamos ver de novo o resultado. Está lá a primeira conta do Pedro, a segunda do Alberto e a terceira do João.

Só que eu para visualizar isso ordenado por nome tive que vir no conta corrente mudar o critério. Ou então perdi a ordenação que tinha por nome. Agora tenho a de saldo. Se eu quiser voltar para o nome, preciso vir no código, comentar essa linha e descomentar a outra. Digamos que não é muito útil. Não quero entrar no código fonte da aplicação para mudar o critério. Como consigo ter os dois critérios disponíveis? Como posso fazer por nome e depois por saldo?

O que vou fazer para mudar esse critério, já que o sort só tem um critério configurado? Vou explicar no você seguinte.

IComparer e CompareTo - Implementando a interface IComparer

Preciso ver como crio um critério de ordenação para que eu possa usar dentro da minha execução do botão, hora quero ordenar por um critério, hora por outro. Note que o método sort possui quatro tipos de implementações. A que vai me interessar é usar alguém como parâmetro do tipo compare. E essa classe implementa a interface IComparer of minha classe que estou querendo ordenar.

Vamos implementar essa nova classe que usa a interface ICompare. Para fazer isso, vou vir no meu Bytebank bibliotecas e vou criar uma pasta chamada critérios. Vou evitar acento porque vou usar esse nome no name space, e aqui dentro vou criar uma classe nova chamada critério conta corrente nome. Ou seja, a classe que vai me dar o critério de ordenação pelo nome.

Tenho minha classe vazia e criada, e vou adicionar o name space. Vou usar classe critério. E vou jogar para dentro a declaração da minha nova classe. Aqui vou implementar ICompare, só que preciso dizer de que. Como vou ordenar contas correntes coloco ICompare of conta corrente. Claro que conta corrente está me dando um erro porque preciso importar o name space onde conta corrente foi definido, que é o classes clientes.

Mesmo assim continua com erro, porque tenho que implementar alguma função ou método que existe nessa interface. Você lembra quando implemento uma interface estou assinando um contrato com alguém que só tem as declarações das funções? O que tem que fazer esse código é a classe que está assinando esse contrato, e no caso aqui é a classe critério conta corrente nome.

O visual basic já me diz mais ou menos o que tenho que fazer. Se eu clicar sobre a linha vermelha, possíveis correções, preciso implementar a interface, ele me escreve já o código, mas aqui dentro preciso comparar o x do tipo conta corrente com o y, pelo critério.

Meu critério por nome é titular nome compare to e dentro de parênteses a outra classe que estou comparando, vou copiar essa linha, colar, só que a primeira ao invés de ser titular nome vai ser x titular nome compare to com y titular nome. Ou seja, estou usando como critério de ordenação o nome. Esse código é muito similar a esse outro, só que aqui comparava direto a propriedade titular porque a primeira comparação está se referindo à classe que está instanciada versus a classe que é passada como parâmetro em obj.

Nesse caso não. Estou passando como parâmetro as duas classes que quero comparar e vou comparar a primeira com a segunda. Vou salvar. Mas isso é meu critério por nome. Eu queria também criar uma outra classe que me dê um critério de ordenação pelo saldo.

Vou em critérios adicionar uma nova classe que vai se chamar critério conta corrente saldo. Adicionei. Para aproveitar o código vou vir no critério conta corrente, copiar as duas linhas, colar aqui, mas fiquei com o name space sem fechar, então vou colocar um end name space embaixo. Dentro do código da classe vou copiar desde o implements até o final e colar dentro.

Só que o critério é outro, não é mais pelo nome. É pelo saldo, então basta eu ir em x titular nome e usar saldo. Vou salvar. Já tenho duas classes que representam dois critérios de ordenação diferentes. Como uso isso no meu sort?

Vamos voltar para o meu programa. Esse primeiro message box mostra as listas naturais, e aqui vou fazer o sort, só que ao invés de ser abre e fecha parênteses, porque se eu usar o abre e fecha parênteses vou usar a implementação compare to que implementei dentro da própria classe, mas agora quero implementar um critério. Vou usar a segunda e vou colocar um new critério conta corrente nome.

Ele está me dando em vermelho porque na verdade tenho que adicionar meu name space. Ao fazer isso vou ordenar minha lista por nome e vou exibi-la. Depois embaixo vou ordenar, mas não vou usar meu critério conta corrente nome, mas sim critério conta corrente saldo. E embaixo exibo ordenado por saldo.

Vamos salvar e vamos executar. Tenho a ordem natural, em que as classes foram inseridas na lista, depois critério por nome. Se eu der um ok quero ver a lista ordenada por saldo. Está lá. O primeiro é o Pedro, o segundo o Alberto e depois o João.

Consegui através do IComparer criar dois critérios diferentes de ordenação e aplicar na minha mesma aplicação. Hora vou ver minha lista usando um critério, hora usando outro.

Sobre o curso VB.NET com Windows Forms Parte 9: Lambda Expressions, LINQ e Dataset

O curso VB.NET com Windows Forms Parte 9: Lambda Expressions, LINQ e Dataset possui 369 minutos de vídeos, em um total de 78 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!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas