Die FilterExpression-Klasse verwenden
In Microsoft Dataverse können Sie die FilterExpression-Klasse dazu verwenden, eine Abfrage zu erstellen, die Mehrfachbedingungen ausdrückt. Beispielsweise können Sie einen Abfrageausdruck erstellen, der die Entsprechung einer SQL-Anweisung, wie ([FirstName] = 'Joe' OR [FirstName] = 'John') AND [City] = 'Redmond'
ist.
In der folgenden Tabelle werden die Eigenschaften der FilterExpression-Klasse aufgeführt:
Eigenschaft | Beschreibung |
---|---|
Conditions | Ruft Bedingungsausdrücke ab, die Tabellenspalten, Bedingungsoperatoren und Spaltenwerte enthalten, oder legt diese fest. |
FilterOperator | Ruft logische AND/OR -Filteroperatoren ab oder legt sie fest. Dies wird mit der LogicalOperator-Enumeration festgelegt. |
Filters | Ruft eine Hierarchie von Bedingung und logischen Filterausdrücken ab oder legt diese fest, die die Ergebnisse der Abfrage filtern. |
IsQuickFindFilter | Ruft einen Wert ab oder legt diesen fest, der angibt, ob der Ausdruck Teil einer Schnellsuchabfrage ist. |
Die FilterExpression-Klasse beinhaltet auch mehrere Hilfsmethoden, mit denen Abfragen leichter erstellt werden können. Im FilterExpression.ConditionExpression fügt der Conditions-Eigenschaft für FilterExpression ein ConditionExpression-Element hinzu und verringert die Codemenge, die zur Erstellung des Bedingungsausdrucks benötigt wird. Im AddFilter.LogicalOperator Methode fügt der Filters-Eigenschaft der FilterExpression-Klasse einen neuen Filter hinzu.
Filterausdruckbeispiel
Im folgenden Code wird gezeigt, wie die FilterExpression-Klasse verwendet wird.
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("---------------------------------------");
Informationen zur IsQuickFindFilter-Eigenschaft
In FilterExpression können Sie die Methoden IsQuickFindFilter verwenden. Eigenschaft verwenden, die analog zur Spalte isquickfindfields
ist, die auf dem Knoten filter
in Fetch XML vorhanden ist. Wenn eine Fetch-Abfrage gespeichert wird, wird diese in den Tabellen SavedQuery
und UserQuery
in den 'IsQuickFind
-Eigenschaften gespeichert. Die IsQuickFindFilter-Eigenschaft wurde hinzugefügt, um zwischen Abfrageausdruck und und Fetch-XML-Abfragen Konsistenz zu erreichen.
Die folgenden Regeln gelten für die IsQuickFindFilter-Eigenschaft:
Dieses Feld kann nur für Filterausdrücke mit einem logischen Operator des Typs LogicalOperator.
Or
auftrue
festgelegt werden. Falls es für Ausdrücke mit dem logischen Operator vom Typ LogicalOperator.And
festgelegt wird, wird die IsQuickFindFilter-Eigenschaft ignoriert.Nur ein Filterausdruck in einer Filterausdruckhierarchie kann auf IsQuickFindFilter = true festgelegt werden. Wird mehr als eine gefunden, wird eine Ausnahme ausgelöst.
Wenn ein Filterausdruck IsQuickFindFilter auf true festgelegt ist, kann sie keine untergeordneten Filterausdruckeigenschaften haben. Sie kann nur ConditionExpression-Eigenschaften haben. Wenn Sie einen untergeordneten Filterausdruck hinzufügen, wird eine Ausnahme ausgelöst.
Alle Bedingungsausdrücke, die sich auf einen Filterausdruck beziehen, bei dem IsQuickFindFilter auf true festgelegt ist, müssen einzelne, nicht Nullwertbedingungen sein. Mit anderen Worten: Da eine Bedingung aus Spalte, Operator und Wert besteht, werden nur Bedingungen unterstützt, bei denen die Werteigenschaft ein einzelner Wert ist, der nicht Null ist. Außerdem sind die einzigen Bedingungsoperatoren, die auf diesen Bedingungsausdrücken unterstützt werden, solche, die einem Einzelwert verwenden, der nicht NULL ist. Wenn ein Null-Wert oder mehrere Werte erkannt werden, wird eine Ausnahme ausgelöst.
Siehe auch
Erstellen von Abfragen mit QueryExpression
Verwenden einer linken äußeren Verknüpfung in QueryExpression für Abfragen nach Datensätzen, die „nicht in“ sind.
Verwenden der ConditionExpression-Klasse
FilterExpression
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).