Anvisningar: Köra SQL-frågor direkt
LINQ till SQL översätter de frågor som du skriver till parametriserade SQL-frågor (i textformulär) och skickar dem till SQL-servern för bearbetning.
SQL kan inte köra de olika metoder som kan vara lokalt tillgängliga för ditt program. LINQ till SQL försöker konvertera dessa lokala metoder till motsvarande åtgärder och funktioner som är tillgängliga i SQL-miljön. De flesta metoder och operatorer på inbyggda .NET Framework-typer har direkta översättningar till SQL-kommandon. Vissa kan skapas från de funktioner som är tillgängliga. De som inte kan skapas genererar körningsfel. Mer information finns i SQL-CLR-typmappning.
Om en LINQ till SQL-fråga inte räcker till för en specialiserad uppgift kan du använda ExecuteQuery metoden för att köra en SQL-fråga och sedan konvertera resultatet av frågan direkt till objekt.
Exempel 1
I följande exempel antar du att data för Customer
klassen är spridda över två tabeller (kund1 och kund2). Frågan returnerar en sekvens med Customer
objekt.
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")
Så länge kolumnnamnen i tabellresultatet matchar kolumnegenskaperna för din entitetsklass skapar LINQ till SQL dina objekt från valfri SQL-fråga.
Exempel 2
Metoden ExecuteQuery tillåter också parametrar. Använd kod som följande för att köra en parametriserad fråga.
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'")
Parametrarna uttrycks i frågetexten med samma kladdiga notation som används av Console.WriteLine()
och String.Format()
. I själva verket String.Format()
anropas faktiskt på frågesträngen som du anger och ersätter de klammerparenteserade parametrarna med genererade parameternamn som @p0, @p1 ..., @p(n).