Útmutató: SQL-lekérdezések közvetlen végrehajtása
A LINQ és az SQL lefordítja a paraméteres SQL-lekérdezésekbe írt lekérdezéseket (szöveges formában), és elküldi őket az SQL-kiszolgálónak feldolgozás céljából.
Az SQL nem tudja végrehajtani az alkalmazás számára helyileg elérhető különböző metódusokat. A LINQ és az SQL megpróbálja ezeket a helyi metódusokat az SQL-környezetben elérhető egyenértékű műveletekké és függvényekké alakítani. A .NET-keretrendszer beépített típusok legtöbb metódusa és operátora közvetlen fordítással rendelkezik az SQL-parancsokra. Néhány a rendelkezésre álló függvényekből állítható elő. Azok, amelyek nem hozhatók létre futásidejű kivételek. További információkért lásd az SQL-CLR típusleképezését.
Azokban az esetekben, amikor a LINQ–SQL-lekérdezés nem elegendő egy speciális feladathoz, a ExecuteQuery metódussal végrehajthat egy SQL-lekérdezést, majd közvetlenül objektumokká alakíthatja a lekérdezés eredményét.
1. példa
Az alábbi példában tegyük fel, hogy az Customer
osztály adatai két táblán (ügyfél1 és ügyfél2) oszlanak el. A lekérdezés objektumsorozatot Customer
ad vissza.
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")
Mindaddig, amíg a táblázatos eredmények oszlopnevei egyeznek az entitásosztály oszloptulajdonságaival, a LINQ–SQL létrehozza az objektumokat bármely SQL-lekérdezésből.
2. példa
A ExecuteQuery metódus paramétereket is lehetővé tesz. Paraméteres lekérdezés végrehajtásához használja az alábbihoz hasonló kódot.
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'")
A paraméterek kifejezése a lekérdezés szövegében ugyanazzal a görbületi jelöléssel történik, amelyet Console.WriteLine()
az és String.Format()
a . Valójában String.Format()
valójában a megadott lekérdezési sztringre van meghívva, és a kapcsosan megfont paramétereket olyan generált paraméternevekkel helyettesíti, mint a @p0... @p1 , @p(n).