LINQ to SQL, interogări de baze de date

„“ În acest articol folosește codul sursă pentru un exemplu

Performanța de LINQ interogare SQL similar cu efectuarea de orice altă interogare LINQ, dar cu câteva excepții. Noi le considerăm foarte pe scurt.

Pentru a efectua o LINQ interogare SQL, trebuie mai întâi să creați un DataContext. Puteți face apoi o cerere la masa din interiorul acestui DataContext:

Când executați acest cod, clientul, CustomerID este egal cu „EASTC“, este extras în Cust variabilă. Cu toate acestea, trebuie amintit că operațiunea standard de interogare unică va arunca o excepție în cazul în care secvența în care ea vyzvana nu conține elemente care se potrivesc. Prin urmare, în acest caz, trebuie să știți exact ce există clientul „EASTC“. De fapt, operațiune standard de interogare SingleOrDefault oferă o mai bună protecție în cazul în care nu există nicio intrare corespunzătoare în cazul în care structura.

În acest exemplu, este necesar să rețineți câteva lucruri. În primul rând, rețineți că, în cererea în comparație cu CustomerID „EASTC“ folosind C # sintaxa. Acest lucru este demonstrat prin utilizarea de ghilimele duble în loc de unică, în conformitate cu sintaxa SQL.

Pe lângă verificarea funcționării folosind C # == în loc de echivalență echivalență operațiune de verificare SQL =. Acest lucru demonstrează faptul că cererea este, de fapt integrat în limba: în cele din urmă, rezultă din însăși denumirea de LINQ - limbaj de interogare integrat.

În al doilea rând, rețineți că, în această interogare interogare sintaxă de expresie este amestecat cu sintaxa standard de notație punct. Partea furnizată în sintaxa expresiei interogare, între paranteze, iar operația unică este invocată folosind notația punct etalon.

Și acum întrebarea. Pentru că, dacă lansarea codului de execuție interogare imediat de mai sus? Pondering răspunsul, nu uita executarea în curs de interogări. Răspunsul este da, operațiunea standard de solicitare unică va executa imediat interogarea. Dacă excludem invocarea acestei operațiuni și a reveni imediat rezultatul interogării, interogarea nu va fi executat imediat.

Codul de mai sus nu produce nici o ieșire de ecran, astfel încât doar pentru a vă asigura că codul extrage de fapt, clientul în cauză, următorul exemplu arată același cod, dar cu adăugarea de ieșire la ecranul care afișează înregistrarea extras al clientului:

Aici este de ieșire:

LINQ to SQL, interogări de baze de date

Am menționat mai devreme că LINQ interogări SQL sunt similare cu interogarea LINQ de obicei, dar cu unele excepții. Să discutăm aceste excepții:

LINQ interogări SQL reveni IQueryable

În timp ce interogări LINQ efectuate pe tablouri și colecții, returnează o secvență de IEnumerable, LINQ interogări SQL, care solicită o secvență, întoarce secvența de tip IQueryable. Mai jos este un exemplu de interogare care returnează o secvență de tip IQueryable:

După cum puteți vedea, acest tip de solicitare de rambursare este IQueryable. Aici este rezultatul codului:

LINQ to SQL, interogări de baze de date
„/>

Așa cum am menționat anterior, deoarece IQueryable implementează IEnumerable, pot fi tratate, secvență de tip IQueryable, ca și în cazul în care a fost o secvență de IEnumerable. În cazul în care apar probleme - nu uita de operare AsEnumerable.

LINQ interogări SQL sunt executate pe masa de obiecte<Т>

In timp ce cele mai multe interogări LINQ convenționale sunt realizate pe tablouri și colecții, care pune în aplicare interfețe IEnumerable sau IEnumerable, LINQ interogare SQL este executat pe clase care implementeaza interfata IQueryable, cum ar fi Tabelul<Т>.

Acest lucru înseamnă că LINQ interogări SQL sunt operații de interogare suplimentare, împreună cu operațiunile de interogare standard, deoarece IQueryable implementează IEnumerable.

LINQ interogări SQL sunt traduse în SQL

Deoarece LINQ SQL interogări returnează o secvență de tip IQueryable, acestea nu sunt compilate într-un limbaj intermediar cod NET, așa cum fac interogări obișnuite LINQ. In schimb, ei sunt transformați în copaci de expresie, care le permite să fie evaluate ca o singură entitate și tradus în proiectarea corespunzătoare și optimă a SQL. Citiți articolul SQL Broadcast. pentru a afla mai multe despre traducere SQL, care are loc în LINQ interogări SQL.

LINQ interogări SQL sunt executate în baza de date

Spre deosebire de interogări LINQ care rulează pe memoria aparatului locale, LINQ interogări SQL sunt traduse în apeluri SQL, care sunt de fapt executate în baza de date. Din cauza acestui fapt, există o discrepanță, cum ar fi modul de manipulare a proiecției, care nu poate fi într-adevăr se întâmplă în baza de date, pentru că ei nu știu nimic despre clasele de bază intrinseci, precum și orice alte clase.

În plus, deoarece interogarea este de fapt executat în baza de date, iar baza de date nu are acces la codul în aplicația dvs., care poate fi făcută în cerere trebuie să fie difuzate, care limitează într-o anumită măsură, în funcție de opțiunile de compilare. Nu poți construi doar o provocare pentru a scrie o metodă într-o expresie lambda și se așteaptă SQL Server pentru a ghici ce să facă cu apelul. Din acest motiv, ar fi frumos să știu ce poate fi difuzat, în sensul că poate fi tradus și ce se întâmplă atunci când traducerea nu este posibilă.

articole similare