1
resposta

Uso de métodos do Linq

Como eu poderia fazer para exibir a lista de músicas de determinado artista sem repetição?

using ScreenSound_04.Modelos;
using System.Linq;
namespace ScreenSound_04.Filtros;

internal class LinqFilter
{

    public static void FiltrarMusicaDeUmArtista(List<Musica> musicas, string nomeDoArtista)
    {

        var musicasDoArtistas = musicas.Where(musica => musica.Artista!.Equals(nomeDoArtista)).ToList();

        Console.WriteLine(nomeDoArtista);

        foreach(var musica in musicasDoArtistas)
        {
            Console.WriteLine($"- {musica.Nome}");
        }

}

Classe Musica

using System.Text.Json.Serialization;
namespace ScreenSound_04.Modelos; 

internal class Musica
{

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

    public void ExibirDetalhesDaMusica()
    {
        Console.WriteLine($"Nome da música: {Nome}");
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Duração da música em segundos: {Duracao / 1000}");
        Console.WriteLine($"Gênero musical: {Genero}");

    }
}

Classe Program

using ScreenSound_04.Modelos;
using System.Text.Json;
using ScreenSound_04.Modelos;
using ScreenSound_04.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)!;

        LinqFilter.FiltrarMusicaDeUmArtista(musicas, "Post Malone");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Temos um problema: {ex.Message}");
    }
}

Saída

Post Malone

  • Better Now
  • Better Now
  • Circles
  • Congratulations
  • Goodbyes (Feat. Young Thug)
  • Psycho (feat. Ty Dolla $ign)
  • Sunflower - Spider-Man: Into the Spider-Verse
  • Wow.
  • rockstar (feat. 21 Savage)
  • Circles
1 resposta

Poderia fazer assim:

using System;
using System.Collections.Generic;
using System.Linq;

internal class LinqFilter
{
    public static void FiltrarMusicaDeUmArtista(List<Musica> musicas, string nomeDoArtista)
    {
        var musicasDoArtistas = musicas.Where(musica => musica.Artista!.Equals(nomeDoArtista))
                                       .Select(musica => musica.Nome)
                                       .Distinct()
                                       .ToList();

        Console.WriteLine(nomeDoArtista);

        foreach (var musica in musicasDoArtistas)
        {
            Console.WriteLine($"- {musica}");
        }
    }
}

Espero ter ajudado.