QuickQuery
El QuickQueryRunner del cliente cuenta, suma, lista valores, lee la primera fila, consulta y agrupa una sección con filtros tipados y el valor ya convertido.
QuickQuery responde en una línea cuántos hay, cuánto suman o cuáles son, con el valor ya convertido a su tipo. Es la propiedad QuickQuery del cliente (QuickQueryRunner) y cada llamada es una consulta IAQuery: hereda sus permisos, operadores, validaciones y el tope de 30.000 filas por página.
var desdeJulio = new[] { QuickQueryFilter.GreaterThanOrEqual(VentasIngresosD.VentasIngresosES.FechaOperacion, "2026-07-01") };
decimal facturado = await dinaupClient.QuickQuery.SumAsync(VentasIngresosD._SectionID, VentasIngresosD.VentasIngresosES.ImporteTotal, desdeJulio);
int cuantas = await dinaupClient.QuickQuery.CountAsync(VentasIngresosD._SectionID, desdeJulio);Antes de empezar
- Un
DinaupClientCconectado. Ver Cliente Dinaup. - Permiso de consulta sobre la sección.
Seis métodos
| Método | Responde a | Devuelve |
|---|---|---|
CountAsync(sectionId, where = null) | cuántas filas cumplen | int |
SumAsync(sectionId, field, where = null) | cuánto suma un campo | decimal |
ValuesAsync(sectionId, field, where = null, orderBy = null, limit = 100) | los valores de una columna | List<string> |
FirstAsync(sectionId, fields, where = null, orderBy = null) | la primera fila que cumple | Dictionary<string, string> o null |
QueryAsync(sectionId, fields, where = null, orderBy = null, limit = 100, page = 1) | las filas completas | QuickQueryResult |
GroupByAsync(sectionId, groupByField, aggregations, where = null, orderBy = null, limit = 100) | totales por grupo | QuickQueryResult |
where es un QuickQueryFilter[], fields un string[] y aggregations un QuickQueryAggField[]. orderBy es un texto como "campo desc": sin dirección, asc en consultas y desc en agrupadas, y solo con campos del SELECT. limit va de 1 a 30.000 y page empieza en 1. Los campos aceptan las rutas de secciones relacionadas de IAQuery.
QuickQuery no lanza excepciones por errores del servidor: el error llega en Ok y Error. CountAsync y SumAsync devuelven 0 también si la consulta falló; para distinguirlo, usa QueryAsync y comprueba Ok.
Filtros
QuickQueryFilter trae un constructor estático por operador, todos con la firma (field, value): Equal, NotEqual, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, Like e In. Un rango son dos filtros.
- Los filtros se combinan con
and;.Or()cambia el conector de ese filtro:QuickQueryFilter.Equal(campo, "1").Or(). Likeno añade comodines (%texto%).Inrecibe los valores separados por comas ("a,b,c").- Para otro operador de IAQuery, construye el filtro a mano:
new QuickQueryFilter { Field = campo, Op = "is null" }(propiedadesField,Op,ValueyLogic). - Los valores viajan como texto: fechas en ISO, números con punto decimal, booleanos como
1y0, y una referencia vacía como"".
Agrupar con GroupByAsync
Agrupa por un campo y calcula una o varias agregaciones con QuickQueryAggField.Sum(field), Count, Avg, Max o Min:
// Diez clientes con más facturación
var res = await dinaupClient.QuickQuery.GroupByAsync(
VentasIngresosD._SectionID,
VentasIngresosD.VentasIngresosES.ReferenciaCliente,
[QuickQueryAggField.Sum(VentasIngresosD.VentasIngresosES.ImporteTotal)],
orderBy: VentasIngresosD.VentasIngresosES.ImporteTotal + " desc",
limit: 10);
foreach (var fila in res.Rows)
Console.WriteLine($"{fila[res.Columns[0]]}: {fila[res.Columns[1]]}");La primera columna es el valor del grupo y después va una por agregación. QuickQuery agrupa solo por el valor directo del campo. Para agrupar por mes o trimestre, filtrar sobre agregados (AddHaving), usar count*, countdistinct o alias propios, usa IAQuery.
Leer el resultado
QueryAsync y GroupByAsync devuelven un QuickQueryResult. Los valores llegan como texto.
| Campo | Contenido |
|---|---|
Ok | true si la consulta se ejecutó |
Error | el fallo cuando Ok es false |
Rows | filas como List<Dictionary<string, string>> |
Columns | alias de las columnas, en el orden del SELECT |
Total | filas devueltas en la página |
TimeMs | milisegundos de ejecución en el servidor |
Las claves de Rows son el último tramo de la ruta de cada campo. Con claves internas (prefijo pr_) o rutas relacionadas, lee por posición con Columns.