0
respostas

Resposta - Filtrar músicas por ano

Classe Music:

using System.Text.Json.Serialization;

namespace exercise97.Models;

internal class Music
{
    [JsonPropertyName("song")]
    public string? Song { get; set; }

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

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

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

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

Classe LinqManipulations:

using exercise97.Models;

namespace exercise97.Manipulations;

internal class LinqManipulations
{
    public static void GetAllMusicGenres(List<Music> musics)
    {
        List<string> musicGenres = musics.Select(music => music.Genre).Distinct().ToList()!;

        Console.WriteLine("Musical Genres:");
        foreach (string genre in musicGenres)
        {
            Console.WriteLine($" - {genre}");
        }
        Console.WriteLine($"Total: {musicGenres.Count} different musical genres");
    }

    public static void GetAllArtistsSorted(List<Music> musics)
    {
        List<string> artistsOrdained = musics.Select(music => music.Artist).OrderBy(artist => artist).Distinct().ToList()!;

        Console.WriteLine("Ordered artists:");
        foreach (string artist in artistsOrdained)
        {
            Console.WriteLine($" - {artist}");
        }
        Console.WriteLine($"Total: {artistsOrdained.Count} distinct artists");
    }

    public static void GetArtistsByMusicGenre(List<Music> musics, string musicGenre)
    {
        List<string> artistsByMusicGenre = musics.Where(music => music.Genre == musicGenre).Select(music => music.Artist).Distinct().ToList()!;

        Console.WriteLine($"Artists of the musical genre {musicGenre}");
        foreach (string artist in artistsByMusicGenre)
        {
            Console.WriteLine($" - {artist}");
        }
        Console.WriteLine($"Total: {artistsByMusicGenre.Count} artists for the {musicGenre} musical genre");
    }

    public static void GetMusicsByArtist(List<Music> musics, string artist)
    {
        List<string> musicsByArtist = musics.Where(music => music.Artist!.Equals(artist)).Select(music => music.Song).ToList()!;

        Console.WriteLine($"Songs by the artist {artist}");
        foreach (string music in musicsByArtist)
        {
            Console.WriteLine($" - {music}");
        }
        Console.WriteLine($"Total: {musicsByArtist.Count} songs for the artist {artist}");
    }

    public static void GetMusicsByYear(List<Music> musics, int year)
    {
        List<string> musicsByYear = musics.Where(music => music.Year!.Equals(Convert.ToString(year))).Select(music => music.Song).ToList()!;

        Console.WriteLine($"Songs of the year {year}");
        foreach (string music in musicsByYear)
        {
            Console.WriteLine($" - {music}");
        }
        Console.WriteLine($"Total: {musicsByYear.Count} songs of the year {year}");
    }
}

Program:

using exercise97.Manipulations;
using exercise97.Models;
using System.Text.Json;

using (HttpClient client = new HttpClient())
{
    try
    {
        string response = await client.GetStringAsync("https://guilhermeonrails.github.io/api-csharp-songs/songs.json");
        List<Music> musics = JsonSerializer.Deserialize<List<Music>>(response)!;
        LinqManipulations.GetAllMusicGenres(musics);
        LinqManipulations.GetAllArtistsSorted(musics);
        LinqManipulations.GetArtistsByMusicGenre(musics, "rock");
        LinqManipulations.GetMusicsByArtist(musics, "Eminem");
        LinqManipulations.GetMusicsByYear(musics, 2020);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}