Verwenden von LINQ zum Erstellen einerAbfrage
Der Abfrageanbieter „.NET Language-Integrated Query(LINQ)” in Microsoft Dataverse verwendet eine Standard-LINQ-Syntax. Der erste Schritt zum Erstellen einer LINQ-Abfrage besteht darin, die relevanten Tabellentypen 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“-Tabelle zurückzugeben. Der Abfragenanbieter kann nur Zeilen eines einzigen Tabellentyps zurückgeben. orderby
und select
-Klauseln müssen auf diese Stammtabelle verweisen. Mit join
-Klauseln können Sie Zeilen mit einer Beziehung zur „Stamm“-Tabelle hinzuzufügen.
LINQ-Operatoren
Alle LINQ-Abfrageausdrücke haben ein ähnliches Format. In den folgenden Abschnitten sind die häufigsten Klauseln in einem LINQ-Abfrageausdruck aufgeführt, wenn der LINQ-Abfragenanbieter von Dataverse verwendet wird.
from
Wenn Sie den generierten Dienstkontext und frühe Bindung verwenden, verwenden Sie den IQueryable
-Tabellensatz, wie z. B. AccountSet
, im generierten Kontext.
Wenn Sie den generierten Kontext nicht verwenden, können Sie mit der CreateQuery
-Methode im Servicekontextobjekt auf Dataverse-Tabellenzeilen zugreifen.
Beispiel:
Verwenden des generierten Servicekontexts:
var query1 = from c in context.ContactSet
select c;
Verwenden der CreateQuery
-Methode:
var query1 = from c in context.CreateQuery<Contact>()
select c;
join
Die join
-Klausel stellt eine innere Verknüpfung dar. Verwenden Sie die Klausel, um mit zwei oder mehreren Tabellen zu arbeiten, die mit einem gemeinsamen Spaltenwert verknüpft werden können.
Beispiel:
from c in context.ContactSet
join a in context.AccountSet on c.ContactId equals a.PrimaryContactId.Id
Dabei gilt Folgendes:
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 Tabellentyp enthalten. Eine zusammengesetzte Bedingung, die mehrere Tabellen mit einbezieht, ist ungültig. Stattdessen sollte jede Tabelle in separaten where
-Klauseln gefiltert werden.
Beispiel:
from a in context.AccountSet
where (a.Name.StartsWith("Contoso") && a.Address1_StateOrProvince == "WA")
orderby
Der orderby
-Operator bringt die zurückgegebenen Abfragenspalten in eine bestimmte Reihenfolge.
Beispiel:
var query1 = from c in context.CreateQuery<Contact>()
orderby c.FullName ascending
select c;
foreach ( var q in query1)
{
Console.WriteLine(q.FirstName + " " + q.LastName);
}
Auswählen
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.
Beispiel:
select new Contact
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
Address1_Telephone1 = c.Address1_Telephone1
};
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 Spaltenname 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 Gruppierungsoptionen, die beim LINQ-Abfrageanbieter nicht verfügbar sind. Weitere Informationen: Daten mithilfe von FetchXml aggregierenDaten mithilfe von FetchXml aggregieren |
orderBy |
Unterstützt die Sortierung nach Tabellenspalten, wie beispielsweise 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 Aggregationsoptionen, die beim LINQ-Abfrageanbieter nicht verfügbar sind. Weitere Informationen: Daten mithilfe von FetchXML aggregieren |
Filtern mehrerer Tabellen
Sie können .NET Language-Integrated Query (LINQ) zum Erstellen von komplexen Abfragen in Dataverse verwenden. Sie können mehrere Join
-Klauseln mit Filterklauseln verwenden, um ein Ergebnis zu erhalten, das nach Spalten aus mehreren Tabellen gefiltert ist.
Das folgende Beispiel zeigt, wie Sie eine LINQ-Abfrage erstellen, die mit zwei Tabellen arbeitet und das Ergebnis anhand von Werten aus den einzelnen Tabellenzeilen 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);
}
}
Siehe auch
Erstellen von Abfragen mit LINQ (.NET language-integrated query)
Verwenden von Entitätsklassen mit später Bindung mit einer LINQ-Abfrage
Sortieren von Ergebnissen mithilfe von Tabellenspalten mit LINQ
Auslagern von umfangreichen Ergebnissätzen mit LINQ
Beispiel: Datenabfrage mithilfe von LINQ
LINQ-Abfragebeispiele mithilfe von OrganizationServiceContext mit Microsoft Dataverse
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).