Freigeben über


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).