Consultar datos usando QueryExpression
La clase QueryExpression, junto con otras clases en el espacio de nombres Microsoft.Xrm.Sdk.Query, proporciona un objeto modelo para componer consultas complejas para recuperar registros de Dataverse usando el método IOrganizationService.RetrieveMultiple. Comparar opciones al consultar datos usando el SDK para .NET
Componer una consulta
Utilice QueryExpression
para redactar consultas dinámicas que pueda modificar sin la manipulación de cadenas/xml requerida usando 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
El siguiente ejemplo representa una consulta QueryExpression
simple que devuelve la columna Nombre de las primeras cinco filas de la tabla Cuenta usando 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);
}
Cuando se inicializa la instancia de consulta, puede:
- Especifique la tabla como la propiedad QueryExpression.EntityName usando el constructor QueryExpression(String).
- Especifique las columnas que se devolverán estableciendo la propiedad QueryExpression.ColumnSet creando una instancia de un nuevo ColumnSet y pasando uno o más valores de columna LogicalName al constructor ColumnSet(String[]). Más información sobre la selección de columnas
- Limite el número de registros devueltos estableciendo la propiedad QueryExpression.TopCount
Estilo de asignación de propiedad
Puede redactar la misma consulta sin el constructor QueryExpression(String) o el estilo de inicialización del objeto y simplemente establecer las propiedades en la instancia instanciada como se muestra en el siguiente ejemplo:
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:
- Especifique la tabla como la propiedad QueryExpression.EntityName directamente después de inicializar la instancia
QueryExpression
usando el constructor predeterminado. - Especifique las columnas que se devolverán configurando el método QueryExpression.ColumnSet usando el método ColumnSet.AddColumn para agregar el nombre de la columna. Más información sobre la selección de columnas
- Limite el número de registros devueltos estableciendo la propiedad QueryExpression.TopCount después de la inicialización del objeto.
Los ejemplos de esta documentación utilizarán una combinación de estilos de inicialización de objetos y 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. Sin configurar la propiedad TopCount
, Dataverse devuelve hasta 5000 filas.
Alternativamente, especifique una cantidad de registros para devolver usando la paginación. No utilice la propiedad TopCount
cuando solicite páginas de datos. Aprenda a solicitar resultados paginados
No puede usar la propiedad TopCount
cuando solicita un recuento de filas usando la propiedad PagingInfo.ReturnTotalRecordCount. Aprender 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 Consultar datos utilizando el SDK para .NET, QueryExpression
es uno de los tres tipos derivados de la Clase QueryBase, para que pueda pasarlo al método IOrganizationService.RetrieveMultiple para conseguir un EntityCollection que contiene los resultados.
EntityCollection results = service.RetrieveMultiple(query);
Sugerencia
Intenta usar el código de muestra de QueryExpression para utilizar este método.
También puede utilizar la clase RetrieveMultipleRequest, establecer la consulta en RetrieveMultipleRequest.Query property para enviar la solicitud usando 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:
- Enviar un parámetro opcional con la solicitud
- Incluya la operación como parte de un lote utilizando las clases ExecuteMultipleRequest o ExecuteTransactionRequest.
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 | Task |
---|---|
Seleccionar columnas | Especifique qué columnas de datos se deben devolver. |
Unir tablas | Especificar el número de tablas relacionada para 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 | Cómo optimizar el rendimiento |
Limitaciones
Hay algunas cosas que puede hacer usando FetchXml que QueryExpression
no son compatibles.
Recupere datos usando la API web de Dataverse. Hay algunas operaciones de API web que habilitan parámetros de
QueryExpression
, pero no puede redactar una consulta usandoQueryExpression
para recuperar datos usando la API web.Limitaciones de agregación enumera las siguientes limitaciones para las agregaciones que usan
QueryExpression
:Realizar comparaciones cruzadas de columnas de tablas.
QueryExpression
admite filtrado por valores de columna en la misma fila, pero deben estar en la misma tabla.No puede anular el orden de clasificación predeterminado para las columnas de opciones
No puede utilizar la optimización del rendimiento de la consulta Materialize tardía.
Importante
Si usa el mensaje FetchXmlToQueryExpression
con la clase SDK FetchXmlToQueryExpressionRequest o la API web función FetchXmlToQueryExpression, cualquier capacidad no admitida por QueryExpression
no se aplica y no habrá ningún error.
Herramientas de la Comunidad
XrmToolBox FetchXMLBuilder es una herramienta gratuita para redactar y probar solicitudes FetchXml, pero también genera código para consultas de QueryExpression
usando la misma experiencia de diseñador.
Nota
Las herramientas creadas por la comunidad no reciben soporte de Microsoft. 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 utiliza QueryExpression
como parámetro para 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 QueryExpressionToFetchXml |
SendBulkMail |
SendBulkMailRequest | Acción SendBulkMail |
SyncBulkOperation |
SyncBulkOperationRequest | Acción SyncBulkOperation |
Rollup |
RollupRequest | Función Rollup |
Nota
Operaciones de API web distintas de BulkDelete, SyncBulkOperation y acción QueryExpressionToFetchXml puede usar FetchXml a través del tipo complejo FetchExpression. Mientras que la API web contiene las estructuras para redactar consultas utilizando QueryExpression
, como tipos complejos QueryExpression, ColumnSet y FilterExpression, actualmente no hay forma de usarlos para recuperar datos con QueryExpression
usando la API web como puede con FetchXml. Esto significa que no es posible probar los resultados de la consulta que enviaría como parámetro mediante API web.
Pasos siguientes
Aprender a seleccionar columnas.
Pruebe algunas consultas.