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.