public async Task <ResultPage <PersonaDto> > BuscarAsync(OptionSearchPersonasDto dto) { var result = new ResultPage <PersonaDto>(); var totales = _uow.Personas.Count(); var totalFiltered = 0; #region Filtro Expression <Func <Persona, bool> > filter = ele => true; if (!string.IsNullOrWhiteSpace(dto.TextSearch)) { filter = filter.And(ele => ele.Id.ToString().Contains(dto.TextSearch.ToLower()) || ele.Nombres.ToLower().Contains(dto.TextSearch.ToLower()) || ele.Apellidos.ToLower().Contains(dto.TextSearch.ToLower()) || ele.Oficina.ToLower().Contains(dto.TextSearch.ToLower())); } var query = _uow.Personas.Where(filter).ProjectTo <PersonaDto>(_mapperConfig).ToListAsync(); IList <PersonaDto> list = await query; totalFiltered = list.Count; #endregion #region Ordenacion switch (dto.OrderBy) { case PersonaOrderColumn.Codigo: { list = dto.IsAscending ? list.OrderBy(ele => ele.Id).ThenBy(ele => ele.Id).ToList() : list.OrderByDescending(ele => ele.Id).ThenBy(ele => ele.Id).ToList(); } break; case PersonaOrderColumn.Nombres: { list = dto.IsAscending ? list.OrderBy(ele => ele.Nombres).ThenBy(ele => ele.Nombres).ToList() : list.OrderByDescending(ele => ele.Nombres).ThenBy(ele => ele.Nombres).ToList(); } break; case PersonaOrderColumn.Apellidos: { list = dto.IsAscending ? list.OrderBy(ele => ele.Apellidos).ThenBy(ele => ele.Apellidos).ToList() : list.OrderByDescending(ele => ele.Apellidos).ThenBy(ele => ele.Apellidos).ToList(); } break; case PersonaOrderColumn.Oficina: { list = dto.IsAscending ? list.OrderBy(ele => ele.Oficina).ThenBy(ele => ele.Oficina).ToList() : list.OrderByDescending(ele => ele.Oficina).ThenBy(ele => ele.Oficina).ToList(); } break; case PersonaOrderColumn.Salario: { list = dto.IsAscending ? list.OrderBy(ele => ele.Salario).ThenBy(ele => ele.Salario).ToList() : list.OrderByDescending(ele => ele.Salario).ThenBy(ele => ele.Salario).ToList(); } break; case PersonaOrderColumn.Experiencia: { list = dto.IsAscending ? list.OrderBy(ele => ele.Experiencia).ThenBy(ele => ele.Experiencia).ToList() : list.OrderByDescending(ele => ele.Experiencia).ThenBy(ele => ele.Experiencia).ToList(); } break; case PersonaOrderColumn.FechaInicio: { list = dto.IsAscending ? list.OrderBy(ele => ele.FechaInicio).ThenBy(ele => ele.FechaInicio).ToList() : list.OrderByDescending(ele => ele.FechaInicio).ThenBy(ele => ele.FechaInicio).ToList(); } break; default: { list = dto.IsAscending ? list.OrderBy(ele => ele.Id).ThenBy(ele => ele.Id).ToList() : list.OrderByDescending(ele => ele.Id).ThenBy(ele => ele.Id).ToList(); } break; } #endregion #region Paginacion var pageIndex = dto.PageIndex; var pageSize = dto.PageSize; if (pageIndex < 1) { pageIndex = 1; } if (pageSize < 1) { pageSize = 1; } result.PageIndex = pageIndex; result.PageSize = pageSize; list = list.Skip((pageIndex - 1) * pageSize) .Take(pageSize).ToList(); #endregion result.Elements = list.ToList(); result.TotalElements = totales; result.TotalPage = (result.TotalElements / result.PageSize) + (result.TotalElements % result.PageSize == 0 ? 0 : 1); result.TotalFiltered = totalFiltered; return(result); }
public async Task <IActionResult> SearchPersonas([FromBody] JqueryDataTablesParameters param) { try { #region Paginacion y Ordenacion var pageIndex = (param.Start / param.Length) + 1; var pageSize = param.Length; var sortedColumns = param.Order; var colum = sortedColumns.FirstOrDefault(); var orderBy = PersonaOrderColumn.Codigo; var orderIsAscending = true; if (colum != null) { var orderByAux = (PersonaOrderColumn)colum.Column; orderBy = orderByAux; orderIsAscending = colum.Dir == DTOrderDir.ASC ? true : false; } #endregion var optionSearch = new OptionSearchPersonasDto { TextSearch = param.Search?.Value, PageIndex = pageIndex, IsAscending = orderIsAscending, PageSize = pageSize, OrderBy = orderBy, }; HttpContext.Session.SetString(nameof(OptionSearchPersonasDto), JsonSerializer.Serialize(optionSearch)); var res = await _service.BuscarAsync(optionSearch); if (res.HasErrors) { return(null); } var list = res.Elements; var data = list.Select(ele => new PersonaViewModel { Codigo = ele.Id.ToString(), Nombres = ele.Nombres, Apellidos = ele.Apellidos, Oficina = ele.Oficina, Experiencia = ele.Experiencia, FechaInicio = ele.FechaInicio, Salario = ele.Salario, Cargo = ele.Cargo }).ToList(); var recordsFiltered = res.TotalFiltered; var recordsTotal = res.TotalElements; return(new JsonResult(new JqueryDataTablesResult <PersonaViewModel> { Draw = param.Draw, Data = data, RecordsFiltered = recordsFiltered, RecordsTotal = recordsTotal })); } catch (Exception e) { Console.Write(e.Message); return(new JsonResult(new { error = "Internal Server Error" })); } }