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);
}
}