Freigeben über


Vorgehensweise: Direktes Ausführen von SQL-Abfragen

LINQ to SQL übersetzt die Abfragen, die Sie (in Textform) in parametrisierte SQL-Abfragen geschrieben haben, und sendet diese zur Verarbeitung an den SQL-Server.

SQL kann nicht alle lokal für Ihre Anwendung verfügbaren Varianten ausführen. LINQ to SQL versucht, diese lokalen Methoden in äquivalente Vorgänge und Funktionen zu konvertieren, die in der SQL-Umgebung verfügbar sind. Für die meisten Methoden und Operatoren in integrierten .NET Framework-Datentypen gibt es direkte Übersetzungen zu SQL-Befehlen. Einige können von den verfügbaren Funktionen erzeugt werden. Jene, die nicht erzeugt werden können, generieren Laufzeitausnahmen. Weitere Informationen finden Sie unter SQL-CLR-Typzuordnung.

Falls eine LINQ to SQL-Abfrage für eine bestimmte Aufgabe nicht ausreicht, können Sie die ExecuteQuery-Methode zur Ausführung einer SQL-Abfrage verwenden und das Ergebnis der Abfrage direkt in Objekte konvertieren.

Beispiel 1

Nehmen Sie im folgenden Beispiel an, dass die Daten für die Customer-Klasse auf zwei Tabellen (Customer1 und Customer2) verteilt sind. Die Abfrage gibt eine Sequenz von Customer-Objekten zurück.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
    FROM customer1 as c1, customer2 as c2
    WHERE c1.custid = c2.custid"
);
Dim db As New Northwnd("c:\northwnd.mdf")
Dim results As IEnumerable(Of Customer) = _
    db.ExecuteQuery(Of Customer) _
    ("SELECT c1.custID as CustomerID," & _
    "c2.custName as ContactName" & _
    "FROM customer1 AS c1, customer2 as c2" & _
    "WHERE c1.custid = c2.custid")

Solange die Spaltennamen im tabellarischen Ergebnis den Spalteneigenschaften Ihrer Entitätsklasse entsprechen, erzeugt LINQ to SQL Ihre Objekte aus einer SQL-Abfrage.

Beispiel 2

Die ExecuteQuery-Methode berücksichtigt auch Parameter. Verwenden Sie Code wie den folgenden, um eine parametrisierte Abfrage auszuführen.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customers WHERE city = {0}",
    "London");
    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim results As IEnumerable(Of Customer) = _
db.ExecuteQuery(Of Customer) _
("SELECT contactname FROM customers WHERE city = {0}, 'London'")

Die Parameter werden im Abfragetext mithilfe der gleichen verschachtelten Schreibweise wie in Console.WriteLine() und String.Format() ausgedrückt. Tatsächlich wird String.Format() in der von Ihnen angegebenen Abfragezeichenfolge aufgerufen. Hierbei werden die Parameter in geschweiften Klammern durch erzeugte Parameternamen wie @p0, @p1 …, @p(n) ersetzt.

Siehe auch