Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
La classe QueryExpression, ainsi que d’autres classes dans l’espace de noms Microsoft.Xrm.Sdk.Query, fournit un modèle objet pour composer des requêtes complexes pour récupérer des enregistrements à partir de Dataverse à l’aide de la méthode IOrganizationService.RetrieveMultiple. Comparez les options lors de l’interrogation de données à l’aide du SDK pour .NET
Composer une requête
Permet QueryExpression de composer des requêtes dynamiques que vous pouvez modifier sans la chaîne ou la manipulation XML requise lors de l’utilisation de FetchXml.
Toutes les requêtes sont basées sur une seule table. Utilisez la QueryExpression classe pour sélectionner la table à partir de laquelle la requête récupère les données.
Style d’initialisation d’objet
L’exemple suivant représente une requête simple QueryExpression qui retourne la colonne Name des cinq premières lignes de la table Account à l’aide de l’initialiseur d’objet afin que la requête soit définie dans une attribution unique.
public static EntityCollection SimpleExample(IOrganizationService service) {
QueryExpression query = new("account")
{
ColumnSet = new ColumnSet("name"),
TopCount = 5
};
return service.RetrieveMultiple(query);
}
Lorsque vous initialisez l’instance de requête, vous pouvez :
- Spécifiez la table comme propriété QueryExpression.EntityName à l’aide du constructeur QueryExpression(String).
- Spécifiez les colonnes à renvoyer en définissant la propriété QueryExpression.ColumnSet en instanciant un nouveau ColumnSet et en transmettant une ou plusieurs valeurs de colonne LogicalName au constructeur ColumnSet(String[]). En savoir plus sur la sélection de colonnes.
- Limitez le nombre d’enregistrements retournés en définissant la propriété QueryExpression.TopCount.
Style d’attribution de propriété
Vous pouvez composer la même requête sans le constructeur QueryExpression(String) ou le style d’initialisation d’objet. Définissez simplement les propriétés sur l’instance instanciée, comme indiqué dans l’exemple suivant :
public static EntityCollection SimpleExample(IOrganizationService service)
{
QueryExpression query = new();
query.EntityName = "account";
query.ColumnSet.AddColumn("name");
query.TopCount = 5;
return service.RetrieveMultiple(query);
}
Cet exemple montre comment vous pouvez :
- Spécifiez la table comme propriété QueryExpression.EntityName directement après l’initialisation de l’instance
QueryExpressionà l’aide du constructeur par défaut. - Spécifiez les colonnes à renvoyer en définissant la QueryExpression.ColumnSet à l’aide de la méthode ColumnSet.AddColumn pour ajouter le nom de la colonne. . En savoir plus sur la sélection de colonnes.
- Limitez le nombre d’enregistrements renvoyés en définissant la propriété QueryExpression.TopCountaprès l’initialisation de l’objet.
Les exemples de cette documentation utilisent une combinaison de styles d’initialisation d’objet et d’affectation de propriétés. À mesure que les requêtes deviennent plus complexes, le style d’initialisation des objets peut devenir fastidieux. Vous pouvez toujours définir les propriétés de la requête séparément et les ajouter à la requête en définissant les propriétés ou en utilisant les méthodes disponibles.
Limiter le nombre de lignes
Pour limitez le nombre de lignes renvoyées, utilisez la propriété QueryExpression.TopCount. Si vous ne définissez pas la TopCount propriété, Dataverse retourne jusqu’à 5 000 lignes pour les tables standard et 500 pour les tables élastiques.
Vous pouvez également spécifier un certain nombre d’enregistrements à retourner à l’aide de la pagination. N’utilisez pas la propriété TopCount lorsque vous demandez des pages de données.
Découvrez comment demander des résultats paginés.
Vous ne pouvez pas utiliser la TopCount propriété lorsque vous demandez un nombre de lignes à l’aide de la propriété PagingInfo.ReturnTotalRecordCount.
Apprenez à compter les lignes.
Renvoyer des résultats distincts
Utilisez le Propriété QueryExpression.Distinct pour exiger que la requête exclue toutes les valeurs en double dans les résultats.
Si vous utilisez la propriété Distinct, vous devez ajouter au moins une OrderExpression à la propriété QueryExpression.Orders pour avoir une pagination cohérente.
Lorsque vous utilisez le Distinct propriété, les résultats renvoyés n’incluent pas les valeurs de clé primaire pour chaque enregistrement car ils représentent une agrégation de toutes les valeurs distinctes.
Récupérer des données
Comme expliqué dans les données de requête à l’aide du Kit de développement logiciel (SDK) pour .NET, QueryExpression il s’agit de l’un des trois types dérivés de la classe QueryBase. Vous pouvez le transmettre à la méthode IOrganizationService.RetrieveMultiple pour obtenir un EntityCollection contenant les résultats.
EntityCollection results = service.RetrieveMultiple(query);
Astuce
Essayez d’utiliser l’ exemple de code QueryExpression pour utiliser cette méthode.
Vous pouvez également utiliser la classe RetrieveMultipleRequest pour définir la requête sur la propriété RetrieveMultipleRequest.Query. Ensuite, envoyez la requête à l’aide de la méthode IOrganizationService.Execute.
RetrieveMultipleRequest request = new()
{
Query = query
};
var response = (RetrieveMultipleResponse)service.Execute(request);
EntityCollection results = response.EntityCollection;
Utilisez la classe RetrieveMultipleRequest lorsque vous souhaitez :
- Envoyer de paramètres facultatifs avec la requête
- Incluez l’opération dans le cadre d’un lot à l’aide des classes ExecuteMultipleRequest ou ExecuteTransactionRequest .
Affiner votre requête
Après avoir sélectionné la table avec laquelle démarrer votre requête, affinez la requête pour obtenir les données nécessaires. Les articles suivants expliquent comment compléter votre requête.
| Article | Tâche |
|---|---|
| Sélectionner des colonnes. | Spécifiez les colonnes de données à renvoyer. |
| Tables de jointure | Spécifiez les tables associées à renvoyer dans les résultats. |
| Lignes de commande | Spécifiez l’ordre de tri des lignes à renvoyer. |
| Lignes de filtre | Spécifiez les lignes de données à renvoyer. |
| Résultats sur la page | Spécifiez le nombre de lignes de données à renvoyer avec chaque requête. |
| Données agrégées | Découvrez comment regrouper et agréger les données renvoyées. |
| Compter le nombre de lignes | Découvrez comment obtenir un décompte du nombre de lignes renvoyées. |
| Optimisations des performances | Comment optimiser les performances. |
Limites
FetchXml prend en charge certaines fonctionnalités qui QueryExpression ne le sont pas.
Récupérez des données à l’aide de l’API Web Dataverse. Certaines opérations d’API web activent
QueryExpressiondes paramètres, mais vous ne pouvez pas composer une requête en utilisantQueryExpressionpour récupérer des données via l’API web.Les limitations d'agrégation indiquent les restrictions suivantes lorsqu'on utilise
QueryExpression:Effectuez des comparaisons croisées de colonnes de tableaux.
QueryExpressionprend en charge le filtrage sur les valeurs de colonne dans la même ligne, mais elles doivent se trouver dans la même table.Vous ne pouvez pas remplacer l’ordre de tri par défaut pour les colonnes de choix.
Vous ne pouvez pas utiliser l’optimisation des performances de la requête Late Materialize .
Important
Si vous utilisez le FetchXmlToQueryExpression message avec la classe FetchXmlToQueryExpressionRequest du SDK ou la fonction Web API FetchXmlToQueryExpression, toutes les fonctionnalités qui QueryExpression ne prennent pas en charge ne sont pas appliquées et aucune erreur ne se produit.
Outils de la communauté
Le XrmToolBoxFetchXMLBuilder est un outil gratuit permettant de composer et de tester les requêtes FetchXml. Il génère également du code pour les requêtes QueryExpression à l’aide de la même expérience de concepteur.
Note
Microsoft ne prend pas en charge les outils créés par la communauté. Si vous avez des questions ou des problèmes avec les outils de la communauté, contactez l’éditeur de l’outil.
Utiliser QueryExpression comme paramètre de message
Vous pouvez également utiliser QueryExpression comme paramètre pour les opérations Dataverse, telles que les messages suivants :
| Nom du message | Classe de requête du SDK pour .NET | Opération de l’API Web |
|---|---|---|
BackgroundSendEmail |
BackgroundSendEmailRequest | Action BackgroundSendEmail |
BulkDetectDuplicates |
BulkDetectDuplicatesRequest | Action BulkDetectDuplicates |
BulkDelete |
BulkDeleteRequest | Action BulkDelete |
FullTextSearchKnowledgeArticle |
FullTextSearchKnowledgeArticleRequest | Action FullTextSearchKnowledgeArticle |
QueryExpressionToFetchXml |
QueryExpressionToFetchXmlRequest | Action QueryExpressionToFetchXml |
SendBulkMail |
SendBulkMailRequest | Action SendBulkMail |
SyncBulkOperation |
SyncBulkOperationRequest | Action SyncBulkOperation |
Rollup |
RollupRequest | Fonction de cumul |
Note
Les opérations d’API web autres que BulkDelete, SyncBulkOperation et QueryExpressionToFetchXml peuvent utiliser FetchXml via le type complexe FetchExpression. Bien que l’API web contienne les structures permettant de composer des requêtes à l’aide de QueryExpression types complexes QueryExpression, ColumnSet et FilterExpression, il n’existe actuellement aucun moyen d’utiliser ces structures pour récupérer des données QueryExpression à l’aide de l’API Web comme vous pouvez le faire avec FetchXml. Cette limitation signifie que vous ne pouvez pas tester les résultats de la requête que vous envoyez en tant que paramètre à l’aide de l’API web.
Étapes suivantes
Découvrez comment sélectionner les colonnes.
Essayez quelques requêtes.