Filtern von Zeilen mit OData
Verwenden Sie die $filter
Abfrageoption , um eine Ressourcensammlung zu filtern.
Dataverse wertet jede Ressource in der Sammlung mit dem Ausdruckssatz für $filter
aus. Nur Datensätze, bei denen der Ausdruck zu true
ausgewertet wird, werden in der Antwort zurückgegeben. Datensätze werden nicht zurückgegeben, wenn der Ausdruck zu false
oder null
ausgewertet wird oder wenn der Benutzer keinen Lesezugriff auf den Datensatz hat.
Die folgende Tabelle beschreibt die Operatoren und Funktionen, die Sie in $filter
-Ausdrücken verwenden können.
Beschreibung | Weitere Informationen | |
---|---|---|
Vergleichsoperatoren | Verwenden Sie die eq ,ne ,gt ,ge ,lt , Und le Operatoren zum Vergleichen einer Eigenschaft und eines Werts. |
Vergleichsoperatoren |
Logische Operatoren | Verwenden von and , or , und not , um komplexere Ausdrücke zu erstellen. |
Logische Operatoren |
Gruppierungsoperatoren | Verwenden Sie Klammern: () , um die Priorität bei der Auswertung eines komplexen Ausdrucks anzugeben. |
Gruppierungsoperatoren |
OData-Abfragefunktionen verwenden | Werten Sie Zeichenfolgenwerte mit contains , endswith und startswith Funktionen aus. |
OData-Abfragefunktionen verwenden |
Dataverse Abfragefunktionen | Verwenden Sie mehr als 60 spezialisierte Funktionen, die für Geschäftsanwendungen entwickelt wurden. | Dataverse Abfragefunktionen |
Lambda-Ausdrücke | Erstellen Sie Ausdrücke basierend auf Werten verwandter Sammlungen. | Filtern Sie anhand von Werten verwandter Sammlungen |
Vergleichsoperatoren
Die folgende Tabelle beschreibt die Operatoren, die Sie verwenden können, um eine Eigenschaft und einen Wert zu vergleichen.
Operator | Beschreibung | Beispiel |
---|---|---|
eq |
Equal | $filter=revenue eq 100000 |
ne |
Ungleich | $filter=revenue ne 100000 |
gt |
Größer als | $filter=revenue gt 100000 |
ge |
Größer als oder gleich | $filter=revenue ge 100000 |
lt |
Kleiner als | $filter=revenue lt 100000 |
le |
Kleiner oder gleich | $filter=revenue le 100000 |
Vergleich von Spalten
Sie können Vergleichsoperatoren verwenden, um Eigenschaftswerte in derselben Zeile zu vergleichen. Nur Vergleichsoperatoren können verwendet werden, um Werte in derselben Zeile zu vergleichen, und die Spaltentypen müssen übereinstimmen. Die folgende Abfrage gibt z.B. alle Kontakte zurück, bei denen firstname
gleich lastname
ist:
GET [Organization URI]/api/data/v9.2/contacts?$select=fullname&$filter=firstname eq lastname
Logische Operatoren
Die folgende Tabelle beschreibt die logischen Operatoren, die Sie verwenden können, um komplexere Ausdrücke zu erstellen.
Operator | Beschreibung | Beispiel |
---|---|---|
and |
Logisch und | $filter=revenue lt 100000 and revenue gt 2000 |
or |
Logisch oder | $filter=contains(name,'(sample)') or contains(name,'test') |
not |
Logische Negation | $filter=not contains(name,'sample') |
Gruppierungsoperatoren
Verwenden Sie Klammern ()
mit logischen Operatoren, um die Priorität für die Auswertung eines komplexen Ausdrucks anzugeben. Beispiel:
$filter=(contains(name,'sample') or contains(name,'test')) and revenue gt 5000
Dataverse-Abfragefunktionen
Verwenden Sie mehr als 60 spezialisierte Funktionen, die für Geschäftsanwendungen entwickelt wurden. Diese Funktionen bieten besondere Funktionalitäten, wie in der folgenden Tabelle beschrieben.
Hinweis
Die Funktion Enthält ist für die Verwendung mit Spalten gedacht, die über eine Volltextindizierung verfügen. Nur die Tabelle Dynamics 365 KBArticle (Artikel) hat Spalten mit Volltextindizierung. Verwenden Sie stattdessen die Funktion OData contains
.
Die Web API Query Function Reference enthält die vollständige Liste. Jeder Artikel enthält ein Syntaxbeispiel, das Sie kopieren können.
Sie müssen den vollständig qualifizierten Namen der Funktion verwenden und den Dienst-Namespace (Microsoft.Dynamics.CRM
) an den Namen der Funktion anhängen.
Jede Funktion hat einen PropertyName
-Parameter, der die zu bewertende Eigenschaft angibt. Die Funktion kann mehr Parameter haben, z. B. PropertyValue
, PropertyValues
oder PropertyValue1
und PropertyValue2
. Wenn diese Parameter vorhanden sind, müssen Sie einen oder mehrere Werte angeben, um sie mit dem PropertyName
-Parameter zu vergleichen.
Das folgende Beispiel zeigt die Verwendung der Between-Funktion für die Suche nach Konten mit 5 bis 2.000 Mitarbeitern.
GET [Organization URI]/api/data/v9.2/accounts?$select=name,numberofemployees
&$filter=Microsoft.Dynamics.CRM.Between(PropertyName='numberofemployees',PropertyValues=["5","2000"])
Filtern Sie mithilfe von Zeichenfolgenwerten
Beachten Sie die folgenden Punkte, wenn Sie nach Zeichenfolgen filtern:
- Alle Filter für String-Werte sind unabhängig von der Groß-/Kleinschreibung.
- Sie müssen Sonderzeichen in Filterkriterien URL-kodieren. Weitere Informationen: URL-Codierung von Sonderzeichen
- Sie können Platzhalterzeichen verwenden, vermeiden Sie jedoch deren falsche Verwendung. Mehr Informationen: Verwenden von Platzhalterzeichen
- Sie können OData Abfragefunktionen verwenden:
contains
,startswith
, undendswith
. Weitere Informationen: OData Abragefunktionen verwenden - Sie müssen einfache Anführungszeichen verwalten, wenn Sie Filter verwenden, die eine Reihe von Zeichenfolgen akzeptieren. Weitere Informationen: Verwalten von Einzelangeboten
URL-Codierung von Sonderzeichen
Wenn die Zeichenfolge, die Sie als Wert in einer Filterfunktion verwenden, ein Sonderzeichen enthält, müssen Sie es per URL codieren. Wenn Sie beispielsweise diese Funktion verwenden: contains(name,'+123')
, wird es nicht funktionieren, weil +
ein Zeichen ist, das nicht in eine URL eingefügt werden kann. Wenn Sie die Zeichenfolge per URL codieren, wird sie zu contains(name,'%2B123')
und Sie erhalten Ergebnisse, bei denen der Spaltenwert +123
enthält.
Die folgende Tabelle zeigt die URL-codierten Werte für häufige Sonderzeichen.
Sonder- zeichen |
URL-codiertes zeichen |
---|---|
$ |
%24 |
& |
%26 |
+ |
%2B |
, |
%2C |
/ |
%2F |
: |
%3A |
; |
%3B |
= |
%3D |
? |
%3F |
@ |
%40 |
Platzhalterzeichen verwenden
Beim Erstellen von Filtern mit Zeichenfolgen können Sie die folgenden Platzhalterzeichen anwenden:
Zeichen | Beschreibung | T-SQL Dokumentation und Beispiele |
---|---|---|
% |
Stimmt mit einer beliebigen Zeichenfolge aus null oder mehr Zeichen überein. Dieses Platzhalterzeichen kann entweder als Präfix oder als Suffix verwendet werden. | Prozentzeichen (Platzhalter – Abzugleichende Zeichen) (Transact-SQL) |
_ |
Verwenden Sie den Unterstrich, um ein beliebiges einzelnes Zeichen in einem Zeichenfolgenvergleichsvorgang abzugleichen, der einen Musterabgleich beinhaltet. | _ (Platzhalter – Übereinstimmung mit einem Zeichen) (Transact-SQL) |
[] |
Stimmt mit jedem einzelnen Zeichen innerhalb des angegebenen Bereichs oder Satzes überein, der in Klammern angegeben ist. | [ ] (Platzhalter - Übereinstimmende Zeichen) (Transact-SQL) |
[^] |
Stimmt mit jedem einzelnen Zeichen nicht innerhalb des angegebenen Bereichs oder Satzes überein, der in eckigen Klammern angegeben ist. | [^] (Platzhalter - Nicht Übereinstimmende Zeichen) (Transact-SQL) |
Weitere Informationen: Platzhalterzeichen in Bedingungen für Zeichenfolgenwerte verwenden
Führende Platzhalter werden nicht unterstützt
Es ist wichtig, am Anfang keine wilden Karten zu verwenden, da diese nicht unterstützt werden. Abfragen, die diese Anti-Patterns verwenden, führen zu Leistungsproblemen, da die Abfragen nicht optimiert werden können. Hier einige Beispiele für führende Platzhalter:
startswith(name,'%value')
endswith(name,'value%')
Erfahren Sie mehr über Fehler, die bei der Verwendung führender Platzhalter zurückgegeben werden
OData-Abfragefunktionen verwenden
Die folgende Tabelle beschreibt die OData-Abfragefunktionen, die Sie zum Filtern von Zeichenfolgen verwenden können:
Funktion | Beispiel |
---|---|
contains |
$filter=contains(name,'(sample)') |
endswith |
$filter=endswith(name,'Inc.') |
startswith |
$filter=startswith(name,'a') |
Sie können diese Funktionen mit dem logischen Operator not
verwenden, um das Ergebnis zu negieren.
Einzelangebote verwalten
Einige Filter akzeptieren ein Array von Zeichenfolgen, wie z.B. die Funktion In Query. Wenn Sie in diesen Filtern Werte angeben, die einfache Anführungszeichen oder Apostrophe enthalten, wie z.B. O'Brian
oder Men's clothes
, müssen Sie die Werte in doppelte Anführungszeichen setzen, zum Beispiel:
GET [Organization URI]/api/data/v9.2/contacts?$select=fullname
&$filter=Microsoft.Dynamics.CRM.In(PropertyName=@p1,PropertyValues=@p2)
&@p1='lastname'
&@p2=["OBrian","OBryan","O'Brian","O'Bryan"]
Wenn Sie das nicht tun, erhalten Sie die folgende Fehlermeldung: Invalid JSON. A comma character ',' was expected in scope 'Array'. Every two elements in an array and properties of an object must be separated by commas.
Wenn sich der Filter auf einen einzelnen Wert bezieht, ersetzen Sie das einfache Anführungszeichen durch zwei aufeinanderfolgende einfache Anführungszeichen, zum Beispiel:
GET [Organization URI]/api/data/v9.2/contacts?$select=fullname
&$filter=lastname eq 'O''Bryan'
Wenn Sie das nicht tun, erhalten Sie eine Fehlermeldung wie diese: There is an unterminated literal at position 21 in 'lastname eq 'O'Bryan''.
Filter basierend auf zugehörigen Datenwerten
Sie können zurückgegebene Zeilen basierend auf Werten in verknüpften Tabellen filtern. Wie Sie filtern, hängt von der Art der Beziehung ab.
Filtern nach Nachschlageeigenschaften
Bei Eins-zu-viele-Beziehungen liefert eine gefilterte Sammlung dieselben Ergebnisse wie die Verwendung einer eq
$filter
auf der Lookup-Eigenschaft für die Beziehung. Beispielsweise diese gefilterte Sammlung:
GET [Organization URI]/api/data/v9.2/systemusers(<systemuserid value>)/user_accounts?$select=name
Ist dasselbe wie dieser Filter für eine Nachschlageeigenschaft.
GET [Organization URI]/api/data/v9.2/accounts?$filter=_owninguser_value eq <systemuserid value>&$select=name
Filtern Sie mithilfe von Eigenschaftswerten der Nachschlagespalte
Sie können basierend auf Werten in einzelwertigen Navigationseigenschaften filtern, die Nachschlagespalten darstellen. Dieses Muster verwenden:
<single-valued navigation property>/<property name>
Das folgende Beispiel gibt Datensätze von Konten basierend auf dem Wert der Spalte primarycontactid/fullname
zurück:
Anforderung:
GET [Organization URI]/api/data/v9.2/accounts?$filter=primarycontactid/fullname eq 'Susanna Stubberod (sample)'
&$select=name,_primarycontactid_value
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antwort:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,_primarycontactid_value)",
"value": [
{
"@odata.etag": "W/\"81359849\"",
"name": "Litware, Inc. (sample)",
"_primarycontactid_value@OData.Community.Display.V1.FormattedValue": "Susanna Stubberod (sample)",
"_primarycontactid_value": "70bf4d48-34cb-ed11-b596-0022481d68cd",
"accountid": "78914942-34cb-ed11-b596-0022481d68cd"
}
]
}
Sie können auch Werte weiter oben in der Hierarchie der einzelwertigen Navigationseigenschaften vergleichen.
Das folgende Beispiel gibt das erste Konto zurück, bei dem der Datensatz des Kontakts die primarycontactid
darstellt, wobei 'Systemadministrator' den Datensatz erstellt hat, unter Verwendung der primarycontactid/createdby/fullname
in der $filter
.
Anforderung:
GET [Organization URI]/api/data/v9.2/accounts?$filter=primarycontactid/createdby/fullname eq 'System Administrator'
&$select=name,_primarycontactid_value
&$expand=primarycontactid(
$select=fullname,_createdby_value;
$expand=createdby($select=fullname))
&$top=1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antwort:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,_primarycontactid_value,primarycontactid(fullname,_createdby_value,createdby(fullname)))",
"value": [
{
"@odata.etag": "W/\"81359849\"",
"name": "Litware, Inc. (sample)",
"_primarycontactid_value@OData.Community.Display.V1.FormattedValue": "Susanna Stubberod (sample)",
"_primarycontactid_value": "70bf4d48-34cb-ed11-b596-0022481d68cd",
"accountid": "78914942-34cb-ed11-b596-0022481d68cd",
"primarycontactid": {
"fullname": "Susanna Stubberod (sample)",
"_createdby_value@OData.Community.Display.V1.FormattedValue": "System Administrator",
"_createdby_value": "4026be43-6b69-e111-8f65-78e7d1620f5e",
"contactid": "70bf4d48-34cb-ed11-b596-0022481d68cd",
"createdby": {
"fullname": "System Administrator",
"systemuserid": "4026be43-6b69-e111-8f65-78e7d1620f5e",
"ownerid": "4026be43-6b69-e111-8f65-78e7d1620f5e"
}
}
}
]
}
Filtern Sie anhand von Werten verwandter Sammlungen
Verwenden Sie die Lambda-Operatoren any
und all
, um Werte in einer Sammlung auszuwerten und die Ergebnisse zu filtern.
any
: Gibttrue
zurück, wenn der angewendete Ausdruck für ein beliebiges Mitglied der Sammlung wahr ist; andernfalls gibt er false zurück.- Der
any
-Operator ohne Argument gibttrue
zurück, wenn die Sammlung nicht leer ist.
- Der
all
: Gibt „Wahr“ zurück, wenn der angewandte Ausdruck für alle Mitglieder der Sammlung wahr ist; andernfalls wird „Falsch“ zurückgegeben.
Die Syntax sieht so aus:
<collection>/[any | all](o:<expression to evaluate>)
In diesem Fall ist o
die Variable, die Elemente in der Sammlung darstellt. Die Konvention besteht darin, den ersten Buchstaben des Typs zu verwenden.
Verwenden Sie in dem Ausdruck o/<property or collection name>
, um auf eine Eigenschaft oder Sammlung eines bestimmten Artikels zu verweisen.
Sie können Bedingungen für mehrere sammlungswertige Navigationseigenschaften und verschachtelte Sammlungen einschließen. Sie können keine Bedingungen in Navigationseigenschaften mit Sammlungswert einfügen, die in ein Suchfeld verschachtelt sind. Zum Beispiel: $filter=primarycontactid/new_contact_account/any(a:a/accountid eq '{GUID}')
wird nicht unterstützt.
Weitere Informationen: Lambda-Operatoren unter oData.org verwenden
Beispiele für Lambda-Operatoren
Das folgende Beispiel ruft alle Konto Datensätze ab, die mindestens eine E-Mail mit „sometext“ im Betreff haben:
GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$filter=Account_Emails/any(e:contains(e/subject,'sometext'))
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Das folgende Beispiel ruft alle Konto Datensätze ab, bei denen alle zugehörigen Aufgaben geschlossen sind:
GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$filter=Account_Tasks/all(t:t/statecode eq 1)
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Das folgende Beispiel ruft alle Konto Datensätze ab, die mindestens eine E-Mail mit „sometext“ im Betreff haben und deren Statuscode aktiv ist:
GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$filter=Account_Emails/any(e:contains(e/subject,'sometext') and
e/statecode eq 0)
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Das folgende Beispiel erstellt eine verschachtelte Abfrage mit den Operatoren any
und all
:
GET [Organization URI]/api/data/v9.2/accounts?$select=name
&$filter=(contact_customer_accounts/any(c:c/jobtitle eq 'jobtitle' and
c/opportunity_customer_contacts/any(o:o/description ne 'N/A'))) and
endswith(name,'Inc.')
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Grenzwerte für Bedingungen
Sie können insgesamt nicht mehr als 500 Bedingungen in eine Abfrage aufnehmen. Andernfalls wird dieser Fehler angezeigt:
Name:
TooManyConditionsInQuery
Code:0x8004430C
Nummer:-2147204340
Meldung:Number of conditions in query exceeded maximum limit.
Sie müssen die Anzahl der Bedingungen zum Ausführen der Abfrage reduzieren. Möglicherweise können Sie die Anzahl der Bedingungen reduzieren, indem Sie die Abfragefunktionen In oder NotIn verwenden, die mit Zahlen, eindeutigen Kennungen und Zeichenfolgen mit bis zu 850 Zeichen verwendet werden können.
Nächste Schritte,
Erfahren Sie, wie Sie Ergebnisse auslagern.
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).