Compartir vía


Consulta de datos mediante QueryExpression

La clase QueryExpression, junto con otras clases del espacio de nombres Microsoft.Xrm.Sdk.Query, proporciona un modelo de objetos para crear consultas complejas para recuperar registros de Dataverse mediante el método IOrganizationService.RetrieveMultiple. Comparar opciones al consultar datos usando el SDK para .NET

Componer una consulta

Use QueryExpression para crear consultas dinámicas que puede modificar sin la manipulación de cadenas o XML necesaria al usar FetchXml.

Todas las consultas se basan en una sola tabla. Utilice la clase QueryExpression para seleccionar la tabla de la que la consulta recupera datos.

Estilo de inicialización de objetos

En el ejemplo siguiente se representa una consulta simple QueryExpression que devuelve la columna Name de las cinco primeras filas de la tabla Account mediante el inicializador de objeto para que la consulta se defina en una sola asignación.

public static EntityCollection SimpleExample(IOrganizationService service) {

   QueryExpression query = new("account")
   {
         ColumnSet = new ColumnSet("name"),
         TopCount = 5
   };

   return service.RetrieveMultiple(query);
}

Al inicializar la instancia de consulta, puede hacer lo siguiente:

Estilo de asignación de propiedad

Puede redactar la misma consulta sin utilizar el constructor QueryExpression(String) ni el estilo de inicialización de objeto. Solo tiene que establecer las propiedades en la instancia instanciada como se muestra en el ejemplo siguiente:

public static EntityCollection SimpleExample(IOrganizationService service)
{

   QueryExpression query = new();
   query.EntityName = "account";
   query.ColumnSet.AddColumn("name");
   query.TopCount = 5;

   return service.RetrieveMultiple(query);
}

Este ejemplo muestra cómo puede:

En los ejemplos de esta documentación se usa una combinación de estilos de inicialización de objetos y de asignación de propiedades. A medida que las consultas se vuelven más complejas, el estilo de inicialización de objetos puede volverse difícil de manejar. Siempre puede definir las propiedades de la consulta por separado y agregarlas a la consulta estableciendo las propiedades o utilizando los métodos disponibles.

Liminar el número de filas

Para limitar el número de filas devueltas utilice la propiedad QueryExpression.TopCount. Si no establece la TopCount propiedad, Dataverse devuelve hasta 5000 filas para tablas estándar y 500 para tablas elásticas.

Como alternativa, especifique una serie de registros que se van a devolver mediante la paginación. No utilice la propiedad TopCount cuando solicite páginas de datos. Obtenga información sobre cómo solicitar resultados paginados.

No se puede usar la TopCount propiedad cuando se solicita un recuento de filas mediante la propiedad PagingInfo.ReturnTotalRecordCount. Aprenda a contar filas.

Devolver resultados distintos

Utilice la propiedad QueryExpression.Distinct para solicitar que la consulta excluya cualquier valor duplicado en los resultados.

Si usa la propiedad Distinct, debe agregar al menos una OrderExpression a la propiedad QueryExpression.Orders para tener una paginación consistente.

Cuando usa la propiedad Distinct, los resultados devueltos no incluyen valores de clave principal para cada registro porque representan una agregación de todos los valores distintos.

Recuperar datos

Como se explica en Consulta de datos mediante el SDK para .NET, QueryExpression es uno de los tres tipos derivados de la clase QueryBase. Puede pasarlo al método IOrganizationService.RetrieveMultiple para obtener un EntityCollection que contenga los resultados.

EntityCollection results = service.RetrieveMultiple(query);

Propina

Intenta usar el código de muestra de QueryExpression para utilizar este método.

También puede usar la clase RetrieveMultipleRequest para establecer la consulta en la propiedad RetrieveMultipleRequest.Query. A continuación, envíe la solicitud mediante el método IOrganizationService.Execute.

RetrieveMultipleRequest request = new()
{
      Query = query
};
var response = (RetrieveMultipleResponse)service.Execute(request);

EntityCollection results = response.EntityCollection;

Utilice la clase RetrieveMultipleRequest cuando desee:

Refinar la consulta

Después de seleccionar la tabla con la que comenzar la consulta, refine la consulta para obtener los datos que necesita. Los siguientes artículos explican cómo completar su consulta.

Artículo Tarea
Seleccionar columnas Especifique qué columnas de datos se deben devolver.
Unir tablas Especifica qué tablas relacionadas devolver en los resultados.
Ordenar filas Especifique el orden de clasificación de las filas que se deben devolver.
Filtrar filas Especifique qué filas de datos se deben devolver.
Resultados de página Especifique cuántas filas de datos se devolverán con cada solicitud.
Agregar datos Cómo agrupar y agregar los datos devueltos.
Recuento del número de filas Cómo obtener un recuento del número de filas devueltas.
Optimizaciones del rendimiento Optimización del rendimiento.

Limitaciones

FetchXml admite algunas funcionalidades que QueryExpression no.

Importante

Si usa el FetchXmlToQueryExpression mensaje con la clase FetchXmlToQueryExpressionRequest del SDK o la función FetchXmlToQueryExpression de LA API web, no se aplicarán las funcionalidades que QueryExpression no sean compatibles y no se produzca ningún error.

Herramientas de la Comunidad

XrmToolBoxFetchXMLBuilder es una herramienta gratuita para redactar y probar solicitudes FetchXml. También genera código para consultas QueryExpression utilizando el mismo entorno de diseño.

Nota

Microsoft no admite herramientas creadas por la comunidad. Si tiene preguntas o problemas con las herramientas de la comunidad, comuníquese con el creador de la herramienta.

Utilice QueryExpression como parámetro de mensaje

También puede usar QueryExpression como parámetro para las operaciones de Dataverse, como los siguientes mensajes:

Nombre de mensaje SDK para la clase de solicitud .NET Operación de API web
BackgroundSendEmail BackgroundSendEmailRequest Acción BackgroundSendEmail
BulkDetectDuplicates BulkDetectDuplicatesRequest Acción "BulkDetectDuplicates"
BulkDelete BulkDeleteRequest Acción BulkDelete
FullTextSearchKnowledgeArticle FullTextSearchKnowledgeArticleRequest Acción FullTextSearchKnowledgeArticle
QueryExpressionToFetchXml QueryExpressionToFetchXmlRequest Acción de QueryExpressionToFetchXml
SendBulkMail SendBulkMailRequest Acción SendBulkMail
SyncBulkOperation SolicitudDeOperaciónMasivaSincronizada Acción SyncBulkOperation
Rollup RollupRequest Función Rollup

Nota

Las operaciones de API web que no sean BulkDelete, SyncBulkOperation y QueryExpressionToFetchXml pueden usar FetchXml mediante el tipo complejo FetchExpression. Aunque la API web contiene las estructuras para crear consultas mediante QueryExpression, como los tipos complejos QueryExpression, ColumnSet y FilterExpression , actualmente no hay ninguna manera de usar estas estructuras para recuperar datos con QueryExpression mediante la API web como puede con FetchXml. Esta limitación significa que no puede probar los resultados de la consulta que envía como parámetro mediante la API web.

Pasos siguientes

Aprende cómo seleccionar columnas.

Pruebe algunas consultas.