public ActionResult <List <ProdutoPesquisaDTO> > GetPesquisaADO([FromQuery] ProdutoParametrosPesquisaDTO parametros) { // criei outra DTO pois os parâmetros não são obrigatórios var produto = _produtoService.pesquisaAdo(parametros).Result; if (produto != null) { return(Ok(produto)); } else { return(NotFound()); } }
// pesquisa com filtros através de ADO NET public async Task <IEnumerable <ProdutoPesquisaDTO> > pesquisaAdo(ProdutoParametrosPesquisaDTO parametros) { // estabelecer conexao com o banco de dados // get connection string - pega string connection do banco respectivo using (IDbConnection connection = GetConnection()) { // select todos campos (*) // where 1 = 1 para poder add AND caso tenha necessidade // caso não sejam passados campos para filtro, a requisição deverá responder normalmente var sql = new StringBuilder(); sql.Append(@"SELECT * FROM PRODUTO WHERE 1 = 1 "); // filtros if (parametros.Id > 0) { sql.AppendFormat(" AND Id = {0}", parametros.Id); } if (!string.IsNullOrEmpty(parametros.Nome)) { //like para procurar por algo parecido e não só exato // os sinais de % no inicio e no fim para procurar em qualquer parte da string sql.AppendFormat(" AND Name like '%{0}%'", parametros.Nome); } if (!string.IsNullOrEmpty(parametros.Categoria)) { //like para procurar por algo parecido e não só exato // os sinais de % no inicio e no fim para procurar em qualquer parte da string sql.AppendFormat(" AND Categoria like '%{0}%'", parametros.Categoria); } //ordenação sempre no final. Testar true/false var ordenarPor = true; if (ordenarPor) { sql.Append(string.Format($" ORDER BY Name")); } else { sql.Append(string.Format($" ORDER BY Categoria")); } // executa o comando sql em forma de string (sql.ToString()) através do método QueryAsync // dapper é uma biblioteca de mapeamento de objeto tipado por <ProdutoPesquisaDTO> com ADO - noco DTO para refletir campos da tabela - dapper não considera dataannotation // listas retornar como IEnumerable // metodo de requisição assincrona (utilizar await para aguardar retorno da resposta da requisição) // add async Task no retorno do metodo return(await connection.QueryAsync <ProdutoPesquisaDTO>(sql.ToString())); } }