Freigeben über


Vorgehensweise: Direktes Ausführen von SQL-Abfragen

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

SQL kann nicht die Vielzahl von Methoden ausführen, die möglicherweise lokal für Ihre Anwendung verfügbar sind. LINQ to SQL versucht, diese lokalen Methoden in gleichwertige Vorgänge und Funktionen zu konvertieren, die in der SQL-Umgebung verfügbar sind. Die meisten Methoden und Operatoren in integrierten .NET Framework-Typen verfügen über direkte Übersetzungen in SQL-Befehle. Einige können aus den verfügbaren Funktionen erstellt werden. Solche, die nicht erstellt werden können, generieren Laufzeit-Ausnahmen. Weitere Informationen finden Sie unter SQL-CLR Typzuordnung.

In Fällen, in denen eine LINQ to SQL-Abfrage für eine spezielle Aufgabe nicht ausreicht, können Sie die ExecuteQuery Methode zum Ausführen einer SQL-Abfrage verwenden und dann das Ergebnis Ihrer Abfrage direkt in Objekte konvertieren.

Beispiel 1

Gehen Sie im folgenden Beispiel davon aus, dass die Daten für die Customer Klasse über zwei Tabellen verteilt sind (Customer1 und Customer2). Die Abfrage gibt eine Abfolge 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 in den tabellarischen Ergebnissen den Spalteneigenschaften Ihrer Entitätsklasse entsprechen, erstellt LINQ to SQL Ihre Objekte aus einer beliebigen SQL-Abfrage.

Beispiel 2

Die ExecuteQuery Methode ermöglicht auch Parameter. Verwenden Sie Code, z. B. folgendes, 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 derselben geschweiften Klammern ausgedrückt, die von Console.WriteLine() und String.Format() verwendet werden. Tatsächlich String.Format() wird tatsächlich für die von Ihnen bereitgestellte Abfragezeichenfolge aufgerufen, wobei die geschweiften Parameter durch generierte Parameternamen wie @p0, @p1 ..., @p(n)ersetzt werden.

Siehe auch