private static StringBuilder MontaQueryCompleta(EventoLocalOcorrencia eventoLocalOcorrencia, EventoLetivo eventoLetivo, string descricao, Paginacao paginacao) { StringBuilder sql = new StringBuilder(); MontaQueryConsulta(eventoLocalOcorrencia, eventoLetivo, descricao, paginacao, sql, contador: false); sql.AppendLine(";"); MontaQueryConsulta(eventoLocalOcorrencia, eventoLetivo, descricao, paginacao, sql, contador: true); return(sql); }
private static void MontaQueryConsulta(EventoLocalOcorrencia eventoLocalOcorrencia, EventoLetivo eventoLetivo, string descricao, Paginacao paginacao, StringBuilder sql, bool contador) { ObtenhaCabecalhoConsulta(sql, contador); ObtenhaFiltroConsulta(eventoLocalOcorrencia, eventoLetivo, descricao, sql); if (!contador) { sql.AppendLine("order by id desc"); } if (paginacao.QuantidadeRegistros > 0 && !contador) { sql.AppendFormat(" OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", paginacao.QuantidadeRegistrosIgnorados, paginacao.QuantidadeRegistros); } }
private static void ObtenhaFiltroConsulta(EventoLocalOcorrencia eventoLocalOcorrencia, EventoLetivo eventoLetivo, string descricao, StringBuilder sql) { if (eventoLocalOcorrencia != 0) { sql.AppendLine("and local_ocorrencia = @local_ocorrencia"); } if (eventoLetivo != 0) { sql.AppendLine("and letivo = @letivo"); } if (!string.IsNullOrWhiteSpace(descricao)) { sql.AppendLine("and lower(f_unaccent(descricao)) like @descricao"); } }
public async Task <PaginacaoResultadoDto <EventoTipo> > ListarTipos(EventoLocalOcorrencia eventoLocalOcorrencia, EventoLetivo eventoLetivo, string descricao, Paginacao paginacao) { var retorno = new PaginacaoResultadoDto <EventoTipo>(); StringBuilder sql = MontaQueryCompleta(eventoLocalOcorrencia, eventoLetivo, descricao, paginacao); var parametros = new { local_ocorrencia = eventoLocalOcorrencia, letivo = eventoLetivo, descricao = $"%{descricao?.ToLowerInvariant()}%" }; using (var multi = await database.Conexao.QueryMultipleAsync(sql.ToString(), parametros)) { retorno.Items = multi.Read <EventoTipo>().ToList(); retorno.TotalRegistros = multi.ReadFirst <int>(); } retorno.TotalPaginas = (int)Math.Ceiling((double)retorno.TotalRegistros / paginacao.QuantidadeRegistros); return(retorno); }