Verwenden von LINQ zum Erstellen einerAbfrage
Veröffentlicht: Januar 2017
Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Der .NET Language-Integrated Query (LINQ)-Abfragenanbieter in Microsoft Dynamics 365 (online und lokal) verwendet Standard-LINQ-Syntax. Der erste Schritt zum Erstellen einer LINQ-Abfrage besteht darin, die relevanten Entitätstypen und die Beziehungen zwischen diesen zu identifizieren. Sie können dann die Datenquelle und die anderen Abfrageparameter angeben.
Die from-Klausel wird verwendet, um eine einzelne „Stamm“-Entität zurückzugeben. Der Abfragenanbieter kann nur Entitäten eines einzigen Entitätstyps zurückgeben.orderby und select-Klauseln müssen auf diese Stammentität verweisen. Mit join-Klauseln können Sie Entitäten einer Beziehung zur „Stamm“-Entität hinzuzufügen.
In diesem Thema
LINQ-Operatoren
LINQ-Einschränkungen
Filtern mehrerer Entitäten
LINQ-Operatoren
Alle LINQ-Abfrageausdrücke haben ein ähnliches Format. In der folgenden Tabelle sind die häufigsten Klauseln in einem LINQ-Abfrageausdruck aufgeführt, wenn der LINQ-Abfragenanbieter von Microsoft Dynamics 365 verwendet wird.
LINQ-Operator |
Beschreibung |
Beispiel |
---|---|---|
Abrufen einer Datenquelle (die from-Klausel) |
Wenn Sie den generierten Dienstkontext und ältere Bindung verwenden, verwenden Sie den Entitätssatz, wie z. B. IQueryableAccountSet, im generierten Kontext. Wenn Sie keinen generierten Kontext verwenden, können Sie mit der CreateQuery-Methode im Servicekontext der Organisation auf Microsoft Dynamics 365 zugreifen. |
Verwenden des generierten Servicekontexts:
Verwenden der CreateQuery-Methode:
|
join-Klausel |
Die join-Klausel stellt eine innere Verknüpfung dar. Verwenden Sie die Klausel, um mit zwei oder mehreren Entitäten zu arbeiten, die mit einem gemeinsamen Attributwert verknüpft werden können. |
|
Filtern (die where-Klausel) |
Die where-Klausel wendet einen Filter auf die Ergebnisse an. Dazu wird häufig ein Boolescher Ausdruck verwendet. Der Filter gibt an, welche Elemente von der Quellreihenfolge auszuschließen sind. Jede where-Klausel kann nur Bedingungen für einen einzelnen Entitätstyp enthalten. Eine zusammengesetzte Bedingung, die mehrere Entitäten mit einbezieht, ist ungültig. Stattdessen sollte jede Entität in separaten where-Klauseln gefiltert werden. |
|
orderby |
Der orderby-Operator stellt die zurückgegebenen Abfragenattribute in eine bestimmte Reihenfolge. |
|
select-Klausel |
Die select-Klausel definiert die Form der zurückgegebenen Daten. Die Klausel erstellt einen Spaltensatz auf der Grundlage der Abfrageausdruckergebnisse. Sie können auch eine Instanz eines neuen Objekts definieren, mit dem gearbeitet werden soll. Das neu mit der select-Klausel erstellte Objekt wird nicht auf dem Server erstellt, sondern ist eine lokale Instanz. |
|
LINQ-Einschränkungen
Der LINQ-Abfragenanbieter unterstützt eine Teilmenge der LINQ-Operatoren. Nicht alle Bedingungen, die in LINQ ausgedrückt werden können, werden unterstützt. In der folgenden Tabelle sind einige Einschränkungen für die grundlegenden LINQ-Operatoren aufgeführt.
LINQ-Operator |
Einschränkungen |
---|---|
join |
Stellt eine innere oder äußere Verknüpfung dar. Nur linke äußere Verknüpfungen werden unterstützt. |
from |
Unterstützt eine einzige from-Klausel pro Abfrage. |
where |
Auf der linken Seite der Klausel muss ein Attributname und auf der rechten Seite der Klausel muss ein Wert stehen. Sie können die linke Seite nicht auf eine Konstante festlegen. Es dürfen keine Konstanten auf beiden Klauselseiten stehen. Unterstützt die String-Funktionen Contains, StartsWith, EndsWith und Equals. |
groupBy |
Nicht unterstützt. FetchXML unterstützt das Gruppieren von Optionen, die nicht mithilfe des LINQ-Abfragenanbieter verfügbar sind.Weitere Informationen: FetchXML-Aggregation verwenden |
orderBy |
Unterstützt die Sortierung nach Entitätsattributen, wie Contact.FullName. |
select |
Unterstützt anonyme Typen, Konstruktoren und Initialisierer. |
last |
Der last-Operator wird nicht unterstützt. |
skip und take |
Unterstützt skip und take mit serverseitigem Paging. Der Wert skip muss größer oder gleich dem Wert take sein. |
aggregate |
Nicht unterstützt. FetchXML unterstützt die Aggregation von Optionen, die nicht mithilfe des LINQ-Abfragenanbieter verfügbar sind.Weitere Informationen: FetchXML-Aggregation verwenden |
Filtern mehrerer Entitäten
Sie können komplexe .NET Language-Integrated Query (LINQ)-Abfragen in Microsoft Dynamics 365 und Microsoft Dynamics 365 (online) erstellen. Sie können mehrere Join-Klauseln mit Filterklauseln verwenden, um ein Ergebnis zu erhalten, das nach Attributen aus mehreren Entitäten gefiltert ist.
Das folgende Beispiel zeigt, wie Sie eine LINQ-Abfrage erstellen, die mit zwei Entitäten arbeitet und das Ergebnis anhand von Werten aus den einzelnen Entitäten filtert.
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var query_where3 = from c in svcContext.ContactSet
join a in svcContext.AccountSet
on c.ContactId equals a.PrimaryContactId.Id
where a.Name.Contains("Contoso")
where c.LastName.Contains("Smith")
select new
{
account_name = a.Name,
contact_name = c.LastName
};
foreach (var c in query_where3)
{
System.Console.WriteLine("acct: " +
c.account_name +
"\t\t\t" +
"contact: " +
c.contact_name);
}
}
Using svcContext As New ServiceContext(_serviceProxy)
Dim query_where3 = From c In svcContext.ContactSet _
Join a In svcContext.AccountSet _
On c.ContactId Equals a.account_primary_contact.Id _
Where a.Name.Contains("Contoso") _
Where c.LastName.Contains("Smith") _
Select New With {Key .account_name = a.Name,
Key .contact_name = c.LastName}
For Each c In query_where3
Console.WriteLine("acct: " & c.account_name & vbTab & vbTab _
& vbTab & "contact: " & c.contact_name)
Next c
End Using
Siehe auch
Beispiel: Erstellen einer LINQ-Abfrage
Beispiel: Komplexe LINQ-Abfragen
Erstellen von Abfragen mit LINQ (.NET language-integrated query)
Verwenden von spät gebundenen Entitätsklassen mit einer LINQ-Abfrage
Blog: LINQPad 4 Driver für Dynamics CRM REST/Web API sind verfügbar auf CodePlex
Microsoft Dynamics 365
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright