1
resposta

Não sei se dei muita volta mas minha solução foi diferente.

Criei um método DAL para buscar todos por um parâmetro.

public List<T>? GetAllBy(Expression<Func<T, bool>> condition)
        {
            return context.Set<T>().Where(condition).ToList();
        }

Criei uma classe menu para mostrar todas as musicas por ano.

internal class MenuMostrarMusicasPorAno : Menu
    {
        public override void Executar(DAL<Musica> musicaDal)
        {
            base.Executar(musicaDal);
            ExibirTituloDaOpcao("Mostrar musicas por ano de lançamento");
            Console.Write("Digite o ano de lançamento que deseja buscar: ");
            int anoDeLancamento = Convert.ToInt32(Console.ReadLine());
            var musicas = musicaDal.GetAllBy(m => m.AnoLancamento == anoDeLancamento);
            if (musicas!.Count == 0)
            {
                Console.WriteLine("Nenhuma música foi encontrada com esse ano de lançamento.");
            }
            foreach (var musica in musicas)
            {
                Console.WriteLine($"Título: {musica.Nome}, Artista: {musica.Artista!.Nome}, Ano de Lançamento: {musica.AnoLancamento}");
            }
            Console.WriteLine("\nDigite uma tecla para voltar ao menu principal");
            Console.ReadKey();
            Console.Clear();
        }
    }
}

como precisava passar Musica no dal tive que criar uma sobrecarga no menu, assim posso usar o executar tanto pra musica quanto pra artista

public virtual void Executar(DAL<Artista> artistaDal)
    {
        Console.Clear();
    }
    public virtual void Executar(DAL<Musica> musicaDal) 
    {
        Console.Clear();
    }

por fim listei o menu no program. Como alterei o executar tive que instanciar o contexto e fazer uma verificação para passar o contexto correto no executar

if (opcoes.ContainsKey(opcaoEscolhidaNumerica))
    {
        Menu menuASerExibido = opcoes[opcaoEscolhidaNumerica];
        if (menuASerExibido is MenuMostrarMusicasPorAno)
        {
            menuASerExibido.Executar(musicaDal);
        }
        menuASerExibido.Executar(artistaDal);
        if (opcaoEscolhidaNumerica > 0) ExibirOpcoesDoMenu();
    } 
    else
    {
        Console.WriteLine("Opção inválida");
    }

Enfim, dei voltas mas funcionou.

1 resposta

Oi, Edison! Tudo bem?

Você encontrou uma solução muito interessante para sua implementação! A abordagem que você adotou para criar um método no DAL que aceita uma expressão como parâmetro é bastante flexível e permite reutilizar o código para diferentes tipos de consultas, isso é ótimo, parabéns!

A sobrecarga dos métodos Executar nas classes de menu também é uma maneira eficaz de lidar com diferentes tipos de entidades, como Musica e Artista, isso permite que você mantenha um design limpo e organizado, enquanto ainda atende às necessidades específicas de cada menu.

Caso você sinta que o código está se tornando muito complexo ou repetitivo, uma sugestão seria considerar o uso de interfaces ou classes base para unificar algumas dessas operações. No entanto, se a solução atual está funcionando bem e é clara para você, isso é o mais importante.

Caso tenha ficado alguma dúvida em relação ao curso ou atividade, sinta-se à vontade em comunicar, estou à disposição e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!