Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Filtro de música por ano

Program.cs

using System.Text.Json;
using screensound.Modelos;
using screensound.Filtros;

using (HttpClient client = new HttpClient())
{
    try
    {
        string resposta = await client.GetStringAsync("https://guilhermeonrails.github.io/api-csharp-songs/songs.json");
        var musicas = JsonSerializer.Deserialize<List<Musica>>(resposta)!;
        //musicas[1998].ExibirDetalhesdaMusica();
        //LinqFilter.FiltrarTodosOsGenerosMusicais(musicas);
        //LinqOrder.ExibirListaDeArtistas(musicas);
        //LinqFilter.FiltrarArtistaPorGenero(musicas, "pop");
        //LinqFilter.FiltrarMusicasDoArtista(musicas, "Michael Jackson");
        LinqFilter.FiltrarMusicasPorAno(musicas, 2012);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Temos um problema: {ex.Message}");
    }
}

LinqFilter.cs

using screensound.Modelos;
namespace screensound.Filtros;

internal class LinqFilter
{
    public static void FiltrarTodosOsGenerosMusicais(List<Musica> musicas)
    {
        var todosOsGenerosMusicais = musicas.Select(generos => generos.Genero).Distinct().ToList();
        foreach (var genero in todosOsGenerosMusicais)
        {
            Console.WriteLine(genero);
        }
    }

    public static void FiltrarArtistaPorGenero(List<Musica> musicas, string genero)
    {
        var artistasPorGenero = musicas
            .Where(musica => musica.Genero!.Contains(genero))
            .Select(musica => musica.Artista)
            .Distinct()
            .ToList();
        Console.WriteLine($"ARTISTAS DO GÊNERO {genero}");
        foreach (var artista in artistasPorGenero)
        {
            Console.WriteLine($"- {artista}");
        }
    }

    public static void FiltrarMusicasDoArtista(List<Musica> musicas, string artista)
    {
        var musicasDoArtista = musicas
            .Where(musica => musica.Artista!.Equals(artista)).ToList();
        Console.WriteLine(artista);
        foreach (var musica in musicasDoArtista)
        {
            Console.WriteLine($"- {musica.Nome}");
        }
    }

    public static void FiltrarMusicasPorAno(List<Musica> musicas, int ano)
    {
        var musicasPorAno = musicas
            .Where(musica => musica.Ano.Equals(ano))
            .Select(musicas => musicas.Nome)
            .Distinct()
            .OrderBy(musica => musica)
            .ToList();
        foreach (var musica in musicasPorAno)
        {
            Console.WriteLine($"- {musica}" +
                $"ANO: {ano}");
        }
    }
}

Musica.cs

using System.Text.Json.Serialization;
namespace screensound.Modelos;
internal class Musica
{
    //anotação (puxando do json para poder traduzir)
    //interrogação pois pode ser nulo

    [JsonPropertyName("song")]
    public string? Nome { get; set; }

    [JsonPropertyName("artist")]
    public string? Artista { get; set; }

    [JsonPropertyName("duration_ms")]
    public int Duracao { get; set; }

    [JsonPropertyName("genre")]
    public string? Genero { get; set; }

    [JsonPropertyName("year")]
    public string? AnoString { get; set; }

    public int Ano
    {
        get
        {
            return int.Parse(AnoString!);
        }
    }

    public void ExibirDetalhesdaMusica()
    {
        Console.WriteLine($"música: {Nome}");
        Console.WriteLine($"artista: {Artista}");
        Console.WriteLine($"duração em segundos: {Duracao/1000}");
        Console.WriteLine($"gênero: {Genero}");
    }
}
1 resposta
solução!

Olá, Giovanna, como vai?

Ficou muito bom o seu código, principalmente a maneira como você implementou os filtros usando LINQ. Sua abordagem para filtrar músicas por ano está bem estruturada e é uma ótima aplicação do LINQ para manipular dados. Parabéns!

Continue assim! Qualquer dúvida, o fórum está à disposição. Bons estudos.