Megosztás a következőn keresztül:


Ú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).

Lásd még