Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Especifique la tabla como la propiedad QueryExpression.EntityName mediante QueryExpression(String) constructor.
- 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[]). Obtenga más información sobre cómo seleccionar 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 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:
- Especifique la tabla como la propiedad QueryExpression.EntityName directamente después de inicializar la
QueryExpressioninstancia mediante 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. Obtenga más información sobre cómo seleccionar columnas.
- Limite el número de registros devueltos estableciendo la propiedad QueryExpression.TopCountdespués de la inicialización del objeto.
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:
- Enviar un parámetro opcional con la solicitud
- Incluya la operación como parte de un lote mediante 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 | 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.
Recupere datos mediante la API web de Dataverse. Algunas operaciones de API web habilitan
QueryExpressionparámetros, pero no puede redactar una consulta medianteQueryExpressionpara recuperar datos a través de la API web.Las limitaciones de agregación enumeran las siguientes limitaciones para las agregaciones mediante
QueryExpression:Realizar comparaciones cruzadas de columnas de tablas.
QueryExpressionadmite filtrado por valores de columna en la misma fila, pero deben estar en la misma tabla.No se puede invalidar el criterio de ordenación predeterminado para las columnas de elección.
No puede utilizar la optimización del rendimiento de la consulta "Late Materialize".
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.