Partager via


Utiliser la classe FilterExpression

Dans Microsoft Dataverse, vous pouvez utiliser la classe FilterExpression pour créer une requête qui exprime plusieurs conditions. Par exemple, vous pouvez créer une expression de requête qui est l’équivalent d’une instruction SQL comme ([FirstName] = 'Joe' OR [FirstName] = 'John') AND [City] = 'Redmond'.

Le tableau suivant répertorie les propriétés de la classe FilterExpression :

Propriété Description
Conditions Obtient ou définit des expressions de condition qui incluent des colonnes de table, des opérateurs de condition et des valeurs de colonne.
FilterOperator Obtient ou définit les opérateurs de filtre logiques AND/OR. La définition s’effectue à l’aide de l’énumération LogicalOperator.
Filters Obtient ou définit une hiérarchie des expressions de filtre conditionnel et logique qui filtrent les résultats de la requête.
IsQuickFindFilter Obtient ou définit une valeur qui indique si l’expression fait partie d’une requête recherche rapide.

La classe FilterExpression contient également plusieurs méthodes d’assistance qui facilitent la création de requêtes. La méthode FilterExpression.ConditionExpression ajoute un ConditionExpression à la propriété Conditions pour FilterExpression, réduisant ainsi la quantité de code nécessaire pour créer l’expression de condition. La méthode AddFilter.LogicalOperator ajoute un nouveau filtre à la propriété Filters de la classe FilterExpression.

Exemple d’expression de filtre

L’exemple de code suivant montre comment utiliser la classe FilterExpression.

QueryExpression query = new QueryExpression("contact");   
query.ColumnSet.AddColumns("firstname", "lastname", "address1_city");   
  
query.Criteria = new FilterExpression();   
query.Criteria.AddCondition("address1_city", ConditionOperator.Equal, "Redmond");   
  
FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.Or);   
childFilter.AddCondition("lastname", ConditionOperator.Equal, "Tharpe");   
childFilter.AddCondition("lastname", ConditionOperator.Equal, "Brown");   
  
// Pass query to service proxy   
EntityCollection results = _serviceProxy.RetrieveMultiple(query);   
Console.WriteLine();   
Console.WriteLine("Query using QE with multiple conditions and filters");   
Console.WriteLine("---------------------------------------");   
  
// Print results   
foreach (var a in results.Entities)   
{   
Console.WriteLine("Name: {0} {1}", a.GetAttributeValue<string>("firstname"), a.GetAttributeValue<string>("lastname"));   
Console.WriteLine("City: {0}", a.GetAttributeValue<string>("address1_city"));   
}   
Console.WriteLine("---------------------------------------");  

À propos de la propriété IsQuickFindFilter

Vous pouvez utiliser la propriété FilterExpression.IsQuickFindFilter qui est analogue à la colonne isquickfindfields qui existe sur le nœud filter dans Fetch XML. Lorsqu’une requête Fetch est enregistrée, elle est stockée dans les propriétés IsQuickFind des tables SavedQuery et UserQuery. La propriété IsQuickFindFilter a été ajoutée pour assurer la cohérence entre les requêtes Query Expression et FetchXML.

Les règles suivantes appliquent à la propriété IsQuickFindFilter :

  • Ce champ peut être défini sur true pour les expressions de filtre avec un opérateur logique de type LogicalOperator.Or. Si elle est définie pour les expressions avec un opérateur logique de type LogicalOperator.And, la propriété IsQuickFindFilter est ignorée.

  • Une seule expression de filtre dans une hiérarchie d’expressions de filtre peut être définie avec IsQuickFindFilter = true. S’il en existe plusieurs, une exception est levée.

  • Si une expression de filtre a la propriété IsQuickFindFilter définie sur true, elle ne peut avoir aucune propriété d’expression de filtre enfant et peut uniquement avoir des propriétés ConditionExpression. Si vous ajoutez une expression de filtre enfant, une exception est levée.

  • Toutes les expressions de condition associées à une expression de filtre avec la propriété IsQuickFindFilter définie sur true doivent être des conditions de valeur non null. En d’autres termes, étant donné qu’une condition est composée d’une colonne, d’un opérateur et d’une valeur, seules les conditions où la propriété value est une valeur unique qui n’est pas nul sont pris en charge. En outre, les seuls opérateurs de condition pris en charge sur ces expressions de condition sont ceux qui fonctionnent avec une valeur unique non null. Si une valeur null ou plusieurs valeurs sont détectées, une exception est levée.

Voir aussi

Générer des requêtes avec QueryExpression
Utilisez une jointure externe gauche dans QueryExpression afin de rechercher des enregistrements « pas dans »
Utilisation de la classe ConditionExpression
FilterExpression

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).