Procedure: SQL-query's rechtstreeks uitvoeren
LINQ naar SQL vertaalt de query's die u schrijft naar geparameteriseerde SQL-query's (in tekstvorm) en verzendt deze naar de SQL-server voor verwerking.
SQL kan de verschillende methoden die mogelijk lokaal beschikbaar zijn voor uw toepassing niet uitvoeren. LINQ naar SQL probeert deze lokale methoden te converteren naar gelijkwaardige bewerkingen en functies die beschikbaar zijn in de SQL-omgeving. De meeste methoden en operators op ingebouwde .NET Framework-typen hebben directe vertalingen naar SQL-opdrachten. Sommige functies kunnen worden geproduceerd op basis van de beschikbare functies. Uitzonderingen die niet kunnen worden geproduceerd, genereren runtime-uitzonderingen. Zie Toewijzing van SQL-CLR-typen voor meer informatie.
In gevallen waarin een LINQ naar SQL-query onvoldoende is voor een gespecialiseerde taak, kunt u de ExecuteQuery methode gebruiken om een SQL-query uit te voeren en vervolgens het resultaat van uw query rechtstreeks converteren naar objecten.
Voorbeeld 1
In het volgende voorbeeld wordt ervan uitgegaan dat de gegevens voor de Customer
klasse zijn verdeeld over twee tabellen (klant1 en klant2). De query retourneert een reeks Customer
objecten.
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")
Zolang de kolomnamen in de tabellaire resultaten overeenkomen met kolomeigenschappen van uw entiteitsklasse, maakt LINQ met SQL uw objecten uit een SQL-query.
Voorbeeld 2
Met de ExecuteQuery methode kunnen ook parameters worden gebruikt. Gebruik code zoals de volgende om een geparameteriseerde query uit te voeren.
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'")
De parameters worden uitgedrukt in de querytekst met behulp van dezelfde gekrulde notatie die wordt gebruikt door Console.WriteLine()
en String.Format()
. In feite wordt String.Format()
aangeroepen op de queryreeks die u opgeeft, waarbij de accolades worden vervangen door gegenereerde parameternamen, zoals @p0... @p1 , @p(n).