1
resposta

[Dúvida] Filtrar com Linq

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

internal class Program
{
    public static async Task Main(string[] args)
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                var link = "https://pokeapi.co/api/v2/pokemon/";
                var response = await client.GetStringAsync(link);
                var pokemon = JsonSerializer.Deserialize<List<Results>>(response);
                LinqFilter.FiltrarNome(pokemon);
          

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Não encontrada.", ex.Message);
        }


    }
}

Não estou conseguindo manipular com linq o objeto, pois o mesmo esta retornando vazio.

 public class LinqFilter
 {
     public static void FiltrarNome(List<Results> nomes)
     {
         var filtra = nomes.Select(x => x.Nome).ToList();
         foreach (var item in filtra)
         {
             Console.WriteLine($"- {item}");
         }
     }
 }

esse e o metodo pra filtrar onde eu so quero filtrar os nomes.

1 resposta

Olá, Diego!

Pelo que percebi, você está tentando consumir uma API e filtrar os resultados usando LINQ, mas está enfrentando problemas porque o objeto está retornando vazio.

Primeiramente, vamos garantir que a API está retornando os dados corretamente. Você pode fazer isso imprimindo a resposta antes de deserializá-la:

var response = await client.GetStringAsync(link);
Console.WriteLine(response);

Se a API estiver retornando os dados corretamente, o problema pode estar na deserialização. A classe Results deve ter uma propriedade chamada Nome que corresponda ao campo na API.

Além disso, a estrutura do JSON retornado pela API Pokémon é um pouco mais complexa. Ele retorna um objeto que contém uma lista de Pokémon em um campo chamado results. Então, você precisa de uma classe adicional para deserializar corretamente:

public class PokemonResponse
{
    public List<Results> results { get; set; }
}

public class Results
{
    public string name { get; set; }
}

E então deserializar a resposta para PokemonResponse:

var pokemonResponse = JsonSerializer.Deserialize<PokemonResponse>(response);
var pokemon = pokemonResponse.results;

Por último, na sua classe LinqFilter, você está tentando acessar a propriedade Nome, mas na classe Results a propriedade é name. Então, você deve alterar o método FiltrarNome para:

public static void FiltrarNome(List<Results> nomes)
{
    var filtra = nomes.Select(x => x.name).ToList();
    foreach (var item in filtra)
    {
        Console.WriteLine($"- {item}");
    }
}

Espero ter ajudado e bons estudos!