public List<TabHistorico> RankingExemplares()
        {
            List<TabHistorico> exRank = new List<TabHistorico>();

            var teste = (from p in db.TabHistorico
                         where p.dsStatus == 5
                         group p by p.fkIdExemplar into g
                         select new { fkIdExemplar = g.Key, Quantidade = g.Count() }
                        ).OrderByDescending(c => c.Quantidade);
            var count = 1;
            foreach (var registro in teste)
            {
                TabHistorico exemplar = new TabHistorico();
                TabExemplar tbex = new TabExemplar();
                TabTitulo tbTit = new TabTitulo();
                tbex = db.TabExemplar.Where(model => model.idExemplar == registro.fkIdExemplar).FirstOrDefault();
                tbTit = db.TabTitulo.Where(model => model.idTitulo == tbex.fkIdTitulo).FirstOrDefault();

                tbex.TabTitulo = tbTit;
                exemplar.idHistorico = count;
                count++;
                exemplar.fkIdExemplar = registro.fkIdExemplar;
                exemplar.dsStatus = registro.Quantidade;
                exemplar.TabExemplar = tbex;
                exRank.Add(exemplar);
            }
            return exRank;
        }
 public ActionResult Cadastrar(TabExemplar exemplar, string titulo,int idLeitor)
 {
     var leitor = leitorBC.Obter(idLeitor);
     if (ModelState.IsValid)
     {
         var result = exemplarBC.Criar(exemplar, titulo, idLeitor);
         return View("~/Views/Exemplar/ConfirmSucessoCriarExemplar.cshtml",new Tuple<String,int>(result.Item2,idLeitor));
     }
     return View("ComecarCorrente", new Tuple<TabExemplar, TabLeitor>(exemplar, leitor));
 }
        public Tuple<TabExemplar, string> Criar(TabExemplar exemplar, string titulo,int idLeitor)
        {
            TabExemplar novoExemplar = new TabExemplar();
            TabHistorico novoHistorico = new TabHistorico();

            //Pesquisa no banco se o título informado já existe
            var _titulo = db.TabTitulo.Where(model => model.nmTitulo.ToLower() == titulo.ToLower()).FirstOrDefault();

            //Senão NÃO existir, preenche a TabTitulo e TabExemplar com as informações passada como parâmetro
            if (_titulo == null)
            {
                //Monta o objeto TabTitulo
                TabTitulo novoTitulo = new TabTitulo();
                novoTitulo.nmTitulo = titulo;
                //Adiciona o titulo no contexto do EF
                novoTitulo = db.TabTitulo.Add(novoTitulo);

                //Monta o objeto TabExemplar
                novoExemplar.nmEditora = exemplar.nmEditora;
                novoExemplar.nmAutor = exemplar.nmAutor;
                novoExemplar.dsEdicao = exemplar.dsEdicao;
                novoExemplar.fkIdTitulo = novoTitulo.idTitulo;
                novoExemplar.dsStatus = (int)StatusRegistroExemplar.DISPONIVEL;
                novoExemplar.dsObs = exemplar.dsObs;
                //Adiciona o exemplar no contexto do EF
                novoExemplar = db.TabExemplar.Add(novoExemplar);

                //Monta o objeto historico
                novoHistorico.dtHistorico = DateTime.Now;
                novoHistorico.dsStatus = (int)EnumStatusHistorico.CADASTRADO;
                novoHistorico.fkIdExemplar = novoExemplar.idExemplar;
                novoHistorico.fkIdLeitor = idLeitor;
                novoHistorico.fkIdReceptor = null;
                //Adiciona o historico no contexto do EF
                db.TabHistorico.Add(novoHistorico);

                db.SaveChanges();

            }
            //Mas se JÁ existir, preenche somente a tabela exemplar
            else
            {
                //Monta o objeto TabExemplar
                novoExemplar.nmEditora = exemplar.nmEditora;
                novoExemplar.nmAutor = exemplar.nmAutor;
                novoExemplar.dsEdicao = exemplar.dsEdicao;
                novoExemplar.fkIdTitulo = _titulo.idTitulo;
                novoExemplar.dsStatus = (int)StatusRegistroExemplar.DISPONIVEL;
                //Persiste o exemplar
                novoExemplar = db.TabExemplar.Add(novoExemplar);

                //Monta o objeto historico
                novoHistorico.dtHistorico = DateTime.Now;
                novoHistorico.dsStatus = (int)EnumStatusHistorico.CADASTRADO;
                novoHistorico.fkIdExemplar = novoExemplar.idExemplar;
                novoHistorico.fkIdLeitor = idLeitor;
                novoHistorico.fkIdReceptor = null;
                 //Adiciona o historico no contexto do EF
                db.TabHistorico.Add(novoHistorico);

                db.SaveChanges();
            }

            return new Tuple<TabExemplar, string>(novoExemplar, "Corrente iniciada !! :D");
        }