public DataTableResponse <Categoria> RespostaPesquisaCategoria(int draw, int comeco, int tamanho, Func <Categoria, IComparable> ordenacao, bool ascendente, string codigo, string descricao) { var predicate = PredicateBuilder.New <Categoria>(); predicate = predicate.And(x => x.Ativo); if (!string.IsNullOrEmpty(codigo)) { predicate = predicate.And(x => x.Codigo.ToUpper().Contains(codigo.ToUpper())); } if (!string.IsNullOrEmpty(descricao)) { predicate = predicate.And(x => x.Descricao.ToUpper().Contains(descricao.ToUpper())); } var totalDados = _service.All(true); IOrderedEnumerable <Categoria> filtrados; if (ascendente) { filtrados = totalDados .Where(predicate) .OrderByDescending(ordenacao); } else { filtrados = totalDados .Where(predicate) .OrderBy(ordenacao); } var displayedCompanies = filtrados .Skip(comeco) .Take(tamanho); return(new DataTableResponse <Categoria>(draw, totalDados.Count(), filtrados.Count(), displayedCompanies)); }