Gewusst wie: Direktes Ausführen von SQL-Abfragen (LINQ to SQL)

Aktualisiert: November 2007

LINQ to SQL übersetzt die Abfragen, die von Ihnen (in Textform) in parametrisierte SQL-Abfragen geschrieben wurden, 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 Operationen und Funktionen zu konvertieren, die in der SQL-Umgebung verfügbar sind. Die meisten Methoden und die Operatoren in .NET Framework-internen Datentypen verfügen über 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 (LINQ to SQL).

In Fällen, in denen eine LINQ to SQL-Abfrage für spezielle Aufgaben nicht ausreicht, können Sie die ExecuteQuery-Methode zur Ausführung einer SQL-Abfrage verwenden und das Ergebnis anschließend direkt in Objekte konvertieren.

Beispiel

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.

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")
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"
);

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

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

    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'")
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<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 übergebenen Abfrage aufgerufen. Hierbei werden die in Anführungszeichen aufgeführten Parameter durch erzeugte Parameternamen wie @p0, @p1 …, @p(n) ersetzt.

Siehe auch

Weitere Ressourcen

Hintergrundinformationen (LINQ to SQL)

Abfragen der Datenbank (LINQ to SQL)