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()));
            }
        }