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.