🔥 Apps, books, system as a service, podcast and more



Retornando IEnumerable na API

image

Olá pessoal, meu nome é Mauricio Junior e hoje eu vou mostrar e falar como retornar IEnumerable dentro da Api para o cliente que chamar o endereço. No código 1.1 recebe como parâmetro apenas o id do usuário, cria uma relação entre duas tabelas através do join e depois coloca uma condição para ser verificado.

  • Ferramenta: Visual Studio ou Rider
  • Linguagem de programação C#
  • Linq para fazer select
  • Framework Entity Framework

As vezes o desenvolvedor pode retornar além de uma classe customizada, pode retornar um IEnumerable com os campos informados no select de retorno. Talvez você esteja acostumado a retornar sempre uma classe como CursoModel ou UsuarioModel, mas no meu caso eu não quero vincular nenhuma classe e para isso eu resolvi retornar um IEnumerable, veja o código 1.1.

Código 1.1 - Carregar o usuário

public IEnumerable LoadUser(int userId)
{
    try
    {
        return
        (
            from c in _db.CourseModels
            join cu in _db.CourseUserModels
                on c.CourseId equals cu.CourseId
            
	where cu.UserId == userId && 
                  cu.Status == 1 
            
	select new
            {
                Date = c.Date,
                Description = c.Description,
                Status = c.Status,
                Title = c.Title,
                CourseId = c.CourseId,
                CourseLink = c.CourseLink,
                ImageCourse = c.ImageCourse,
                UserId = c.UserId,
                CourseCategoryId = c.CourseCategoryId,
                CourseDescription = c.CourseDescription,
                CoursePrice = c.CoursePrice,
                CoursePriceCupom = c.CoursePriceCupom,
                CupomCode = c.CupomCode
            }
        ).ToList();
    }
    catch (Exception ex)
    {
        _logger.LogError($"Method: {MethodBase.GetCurrentMethod().Name} - Exception: {ex.Message} - {DateTime.Now}");
        throw;
    }
}

Para fazer o Join é necessário vincular as duas tabelas através da chave, mas isso é um outro assunto, só para você não esquecer. No final eu utilizo o select new e coloco todos os campos necessários de retorno.

Para colocar os campos, primeiro eu preciso utilizar um nome, pode ser qualquer nome, e depois o valor que será atribuído, por exemplo: Date = c.Date. A letra c vem do alias da tabela Course e consequentemente o campo Date vem de lá.

Depois de atribuir todos os valores e como pode vir mais de um dado, coloquei o .ToList() e com o IEnumberable, basta ser feliz.

Eu recomendo a todos a utilizar classes customizadas mas nesse caso, eu não precisei. Apenas o cliente será necessário criar uma classe customizada para que o dados possa ser deserializado.

Uma outra opção para retornar apenas um resultado de uma tabela usando o select c (alias definido) como no código 1.2.

Código 1.2 - Retornando os dados de uma tabela.

public IEnumerable LoadUser(int userId)
{
    try
    {
        return
        (
            from c in _db.CourseModels
            join cu in _db.CourseUserModels
                on c.CourseId equals cu.CourseId
            
	where cu.UserId == userId && 
                  cu.Status == 1 
            
	select c

        ).ToList();
    }
    catch (Exception ex)
    {
        _logger.LogError($"Method: {MethodBase.GetCurrentMethod().Name} - Exception: {ex.Message} - {DateTime.Now}");
        throw;
    }
}

Lembro que existem vários cursos que eu ensino como fazer isso de uma maneira mais detalhada na plataforma ecode10.academy.

Bom, espero que tenha gostado e eu fico por aqui. Qualquer dúvida você entrar em contato comigo aqui www.mauriciojunior.net ou aqui www.ecode10.com.

Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top