public IActionResult Pesquisa(string filtro) { JObject o = JObject.Parse(filtro); LojaFiltrosModel filtros = o.ToObject <LojaFiltrosModel>(); IEnumerable <Livro> livros = _facade.ListAllInclude <Livro>() .Where(l => !l.Inativo) .OrderBy(l => l.Titulo); if (!String.IsNullOrEmpty(filtros.Titulo)) { livros = livros.Where(l => l.Titulo.Contains(filtros.Titulo)); } if (!String.IsNullOrEmpty(filtros.Autor)) { livros = livros.Where(l => l.Autor.Contains(filtros.Autor)); } if (!String.IsNullOrEmpty(filtros.Isbn)) { livros = livros.Where(l => l.Isbn.Contains(filtros.Isbn)); } if (!String.IsNullOrEmpty(filtros.Editora)) { livros = livros.Where(l => l.Editora.Nome.Contains(filtros.Editora)); } if (!String.IsNullOrEmpty(filtros.Categorias)) { string[] ctgs = filtros.Categorias.Split(" "); IEnumerable <CategoriaLivro> categoriaLivros = _facade.Query <CategoriaLivro>(c => ctgs.Contains(c.Nome), c => c); IEnumerable <LivroCategoriaLivro> livCtl = livros.SelectMany(c => c.LivrosCategoriaLivros); IEnumerable <int> ids = livCtl.Where(l => categoriaLivros.Select(c => c.Id).Contains(l.CategoriaLivroId)) .Select(l => l.LivroId).Distinct(); livros = livros.Where(l => ids.Contains(l.Id)); } if (filtros.PrecoMin > 0) { livros = livros.Where(l => l.Valor > filtros.PrecoMin); } if (filtros.PrecoMax > 0) { livros = livros.Where(l => l.Valor < filtros.PrecoMax); } if (!String.IsNullOrEmpty(filtros.DataMin)) { DateTime dataMin = Convert.ToDateTime(filtros.DataMin); livros = livros.Where(l => l.DtLancamento.Date >= dataMin.Date); } if (!String.IsNullOrEmpty(filtros.DataMax)) { DateTime dataMax = Convert.ToDateTime(filtros.DataMax); livros = livros.Where(l => l.DtLancamento.Date <= dataMax.Date); } if (filtros.PaginaAtual > 0) { livros = livros.Skip((filtros.PaginaAtual - 1) * 8); } _vh = new ListaCardLivrosViewHelper { Entidades = new Dictionary <string, object> { [typeof(IList <Livro>).Name] = livros.Take(8).ToList(), [nameof(ListaCardLivrosModel.PagAtual)] = filtros.PaginaAtual, [nameof(ListaCardLivrosModel.PagMax)] = (livros.Count() / 8) + 1 } }; return(PartialView("../Shared/_ListaLivrosCardPartial", _vh.ViewModel)); }
protected override void ToViewModel() { PaginaLojaModel vm = new PaginaLojaModel(); LojaFiltrosModel filtrosModel = new LojaFiltrosModel(); ListaCardLivrosModel listaCardModel = new ListaCardLivrosModel(); if (Entidades == null) { _viewModel = vm; return; } ListaCardLivrosViewHelper listaCardHelper = new ListaCardLivrosViewHelper { Entidades = new Dictionary <string, object> { [typeof(IList <Livro>).Name] = Entidades[typeof(IList <Livro>).Name], [nameof(ListaCardLivrosModel.PagAtual)] = Entidades[nameof(ListaCardLivrosModel.PagAtual)], [nameof(ListaCardLivrosModel.PagMax)] = Entidades[nameof(ListaCardLivrosModel.PagMax)] } }; listaCardModel = (ListaCardLivrosModel)listaCardHelper.ViewModel; string Titulo = nameof(LojaFiltrosModel.Titulo), Autor = nameof(LojaFiltrosModel.Autor), Isbn = nameof(LojaFiltrosModel.Isbn), Editora = nameof(LojaFiltrosModel.Editora), PrecoMin = nameof(LojaFiltrosModel.PrecoMin), PrecoMax = nameof(LojaFiltrosModel.PrecoMax), DataMin = nameof(LojaFiltrosModel.DataMin), DataMax = nameof(LojaFiltrosModel.DataMax), Categorias = nameof(LojaFiltrosModel.Categorias); if (Entidades.ContainsKey(Titulo)) { filtrosModel.Titulo = (string)Entidades[Titulo]; } if (Entidades.ContainsKey(Autor)) { filtrosModel.Autor = (string)Entidades[Autor]; } if (Entidades.ContainsKey(Isbn)) { filtrosModel.Isbn = (string)Entidades[Isbn]; } if (Entidades.ContainsKey(Editora)) { filtrosModel.Editora = (string)Entidades[Editora]; } if (Entidades.ContainsKey(PrecoMin)) { filtrosModel.PrecoMin = (double)Entidades[PrecoMin]; } if (Entidades.ContainsKey(PrecoMax)) { filtrosModel.PrecoMax = (double)Entidades[PrecoMax]; } if (Entidades.ContainsKey(DataMin)) { filtrosModel.PrecoMax = (double)Entidades[DataMin]; } if (Entidades.ContainsKey(DataMax)) { filtrosModel.PrecoMax = (double)Entidades[DataMax]; } if (Entidades.ContainsKey(Categorias)) { filtrosModel.Categorias = (string)Entidades[Categorias]; } vm.Filtros = filtrosModel; vm.Livros = listaCardModel; _viewModel = vm; }