public RetornoBase <Livro> Localizar(int livroId)
        {
            var retorno = new RetornoBase <Livro>();

            try
            {
                var tbLivro = db.Livros.Include("Editora").Include("Autores").FirstOrDefault(x => x.LivroId == livroId);
                if (tbLivro != null)
                {
                    retorno.Valor = RepositorioLivro.TabLivroParaLivro(tbLivro);
                }
                else
                {
                    retorno.Mensagem = $"Livro não localizado para ID {livroId}.";
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = $"Não foi possível localizar o livro {livroId}.";
                retorno.Problemas.Add($"Falha ao {nameof(Localizar)} em {nameof(RepositorioLivro)}: {ex.Message}");
            }

            return(retorno);
        }
        public RetornoBase <ICollection <Livro> > ListarAcervo(string titulo, int editoraId, int autorId)
        {
            var retorno = new RetornoBase <ICollection <Livro> >();

            try
            {
                List <Expression <Func <TabLivro, bool> > > expressoes = new List <Expression <Func <TabLivro, bool> > >();
                if (!string.IsNullOrEmpty(titulo))
                {
                    expressoes.Add(x => x.Titulo.Contains(titulo));
                }
                if (editoraId > 0)
                {
                    expressoes.Add(x => x.EditoraId == editoraId);
                }
                if (autorId > 0)
                {
                    expressoes.Add(x => x.Autores.Select(a => a.AutorId).Contains(autorId));
                }

                List <TabLivro> tbLivros = null;

                if (expressoes.Count > 0)
                {
                    if (expressoes.Count > 1)
                    {
                        var exLivro = expressoes[0].And(expressoes[1]);
                        for (var i = 2; i < expressoes.Count; i++)
                        {
                            exLivro = exLivro.And(expressoes[i]);
                        }
                        tbLivros = db.Livros.Include("Editora").Include("Autores").Where(exLivro).ToList();
                    }
                    else
                    {
                        tbLivros = db.Livros.Include("Editora").Include("Autores").Where(expressoes[0]).ToList();
                    }
                }
                else
                {
                    tbLivros = db.Livros.Include("Editora").Include("Autores").ToList();
                }

                if (tbLivros != null)
                {
                    retorno.Valor = new List <Livro>();
                    foreach (var tbLivro in tbLivros)
                    {
                        retorno.Valor.Add(RepositorioLivro.TabLivroParaLivro(tbLivro));
                    }
                }
                else
                {
                    retorno.Mensagem = $"Nenhum livro no acervo para os dados de entrada.";
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = $"Não foi possível listar o acervo.";
                retorno.Problemas.Add($"Falha ao {nameof(ListarAcervo)} em {nameof(RepositorioLivro)}: {ex.Message}");
            }

            return(retorno);
        }