Fala, Hugo, tudo bem?
Primeiro eu extrairia a recuperação dos livros para um método único onde faria o filtro com Linq. Depois faria todas as actions usarem esse método:
private IEnumerable<Livro> LivrosDaLista(string lista)
{
var _repo = new LivroRepositorioCSV();
return _repo.Todos
.Where(l => l.Lista.Titulo == lista);
}
public IActionResult ParaLer()
{
ViewBag.Livros = LivrosDaLista("Para Ler");
return View("lista");
}
public IActionResult Lendo()
{
ViewBag.Livros = LivrosDaLista("Lendo");
return View("lista");
}
public IActionResult Lidos()
{
ViewBag.Livros = LivrosDaLista("Lidos");
return View("lista");
}
Mas ainda dá pra melhorar mais. O tipo da lista definido como uma string está muito frágil. O que acontece se eu chamar LivrosDaLista("Para ler")
? Parece que vai funcionar mas como a letra L está minúscula nenhum livro será filtrado.
No curso de APIs eu inicio com um projeto um pouco mais robusto: usando enumerados para definir o tipo da lista e usando um banco de dados como repositório de livros.
Mas repara que o curso é sobre APIs, então eu não explico como cheguei nessa solução. Se quiser maiores detalhes abra outro tópico que te explico, ok?
Espero que tenha ajudado.
Abraços!