public ActionResult Filtrar(Filtros viewModel) { var listaDeObjetos = _objetoApp.ObterTodosOsAtivos(); //Nome if (!string.IsNullOrEmpty(viewModel.Nome)) listaDeObjetos = listaDeObjetos.Where(o => o.Nome.Contains(viewModel.Nome)); //Área de conhecimento if (viewModel.ListaSelectAreaDeConhecimento.Any(t => t.Selected)) listaDeObjetos = listaDeObjetos.Where(o => o.ListaAreasDeConhecimento .Any(a => viewModel.ListaSelectAreaDeConhecimento .Any(area => area.Id == a.Id && area.Selected))); //Tipo e Categoria if (viewModel.ListaSelectTipo.Any(t => t.Selected)) { //Tipo if (viewModel.ListaSelectTipo.Any(t => t.Selected)) listaDeObjetos = listaDeObjetos.Where(o => viewModel.ListaSelectTipo .Any(tipo => tipo.Id == o.ObjetoTipo.Id && tipo.Selected)); //Categoria if (viewModel.ListaSelectTipo.Any(t => t.ListaCategorias.Any(a => a.Selected))) { var categoriasSelecionadas = from helper in viewModel.ListaSelectTipo.SelectMany(t => t.ListaCategorias , (tipo, categoria) => new { categoria }) where helper.categoria.Selected select new { Categoria = helper.categoria }; listaDeObjetos = listaDeObjetos .Where(obj => categoriasSelecionadas .Any(cat => cat.Categoria.Id == obj.ObjetoCategoria.Id)); } //Categoria //if (viewModel.ListaSelectTipo.Any(t => t.Selected && t.ListaCategorias.Any(a => a.Selected))) // listaDeObjetos = listaDeObjetos.Where(o => viewModel.ListaSelectTipo // .Any(tipo => tipo.Id == o.ObjetoTipo.Id)); } var resultadoBusca = new ResultadoBusca { ListaObjetos = listaDeObjetos, Filtros = new Filtros() }; //Filtro View - Área de conhecimento var todasAsAreasDeConhecimento = _objetoAreaDeConhecimentoApp.RecuperarUtilizadas(); foreach (var areaDeConhecimento in todasAsAreasDeConhecimento) { var areaViewModel = new SelectFiltroAreaDeConhecimento(areaDeConhecimento); if (viewModel.ListaSelectAreaDeConhecimento.Any()) { if (viewModel.ListaSelectAreaDeConhecimento.Any(a => a.Id == areaViewModel.Id)) areaViewModel.Selected = true; } resultadoBusca.Filtros.AdicionarAreaDeConhecimento(areaViewModel); } //Filtro View Tipo e Categoria var todosOsTipos = _objetoTipoApp.ObterTodos(); foreach (var tipo in todosOsTipos) { var listaDeCategoriasFiltro = Mapper.Map<IEnumerable<ObjetoCategoria>, IEnumerable<SelectFiltroCategoria>>(tipo.ListaCategorias).ToList(); var tipoViewModel = new SelectFiltroTipo(tipo, listaDeCategoriasFiltro); if (viewModel.ListaSelectTipo.Any()) { if (viewModel.ListaSelectTipo.Any(a => a.Id == tipoViewModel.Id && a.Selected)) { tipoViewModel.Selected = true; foreach (var categoria in tipoViewModel.ListaCategorias) { var categoriasSelecionadasPorFiltro = from helper in viewModel.ListaSelectTipo.SelectMany(t => t.ListaCategorias , (tipoAux, categoriaAux) => new { tipoAux, categoriaAux }) select new { TipoID = helper.tipoAux.Id , Categoria = helper.categoriaAux }; if (categoriasSelecionadasPorFiltro.Any(csf => csf.Categoria.Id == categoria.Id && csf.Categoria.Selected)) { categoria.Selected = true; } } } } resultadoBusca.Filtros.AdicionarTipo(tipoViewModel); } return View("Buscar", resultadoBusca); }
public void AdicionarTipo(SelectFiltroTipo selectTipo) { this.ListaSelectTipo.Add(selectTipo); }
/* public ActionResult Index() { return View(); } */ public ActionResult Buscar(FormBusca viewModel) { var listaDeObjetos = _objetoApp.ObterTodosOsAtivos(); if (!string.IsNullOrEmpty(viewModel.Nome)) listaDeObjetos = listaDeObjetos.Where(o => o.Nome.Contains(viewModel.Nome)); if (viewModel.ObjetoAreaId > 0) listaDeObjetos = listaDeObjetos.Where(o => o.ListaAreasDeConhecimento .Any(a => a.Id == viewModel.ObjetoAreaId)); if (viewModel.ObjetoTipoId > 0) listaDeObjetos = listaDeObjetos.Where(o => o.ObjetoTipoId == viewModel.ObjetoTipoId); var resultadoBusca = new ResultadoBusca { ListaObjetos = listaDeObjetos, Filtros = new Filtros() }; //Filtro - Área de conhecimento var todasAsAreasDeConhecimento = _objetoAreaDeConhecimentoApp.RecuperarUtilizadas(); foreach (var areaDeConhecimento in todasAsAreasDeConhecimento) { var areaViewModel = new SelectFiltroAreaDeConhecimento(areaDeConhecimento); if (areaViewModel.Id == viewModel.ObjetoAreaId) areaViewModel.Selected = true; resultadoBusca.Filtros.AdicionarAreaDeConhecimento(areaViewModel); } //Filtro Tipo var todosOsTipos = _objetoTipoApp.ObterTodos(); foreach (var tipo in todosOsTipos) { var listaDeCategoriasFiltro = Mapper.Map<IEnumerable<ObjetoCategoria>, IEnumerable<SelectFiltroCategoria>>(tipo.ListaCategorias).ToList(); var tipoViewModel = new SelectFiltroTipo(tipo, listaDeCategoriasFiltro); if (tipoViewModel.Id == viewModel.ObjetoTipoId) tipoViewModel.Selected = true; resultadoBusca.Filtros.AdicionarTipo(tipoViewModel); } return View(resultadoBusca); }