Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

RecuperaMaiorDesconto realmente retorna o maior desconto?

Analisando a implementação do método RecuperaMaiorDesconto, percebi que ele ordena por o.Preco crescente e retorna o primeiro resultado:

.Where(filtro)
.Where(o => o.Ativa)
.OrderBy(o => o.Preco)
.FirstOrDefault();

Isso retorna a oferta com menor preço final, não necessariamente a de maior desconto, o correto não seria ordenar por o.Desconto decrescente em vez de o.Preco crescente?

1 resposta

Olá, Douglas! Como vai?

Primeiramente, seja bem-vindo à Alura! 💙

E você fez uma ótima observação! Para que o método RecuperaMaiorDesconto retorne a oferta com o maior desconto, ele deveria ordenar pela propriedade o.Desconto de forma decrescente, em vez de ordenar por o.Preco de forma crescente. A implementação atual está retornando a oferta com o menor preço, o que não necessariamente significa que ela tem o maior desconto.

Aqui está uma sugestão de como você poderia ajustar o método:

public OfertaViagem? RecuperaMaiorDesconto(Func<OfertaViagem, bool> filtro) => ofertaViagem
    .Where(filtro)
    .Where(o => o.Ativa)
    .OrderByDescending(o => o.Desconto)        
    .FirstOrDefault();

Com essa modificação, o método ordenará as ofertas de forma que a com o maior desconto venha primeiro, e FirstOrDefault() retornará essa oferta.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado