„“ Î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:

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
După cum puteți vedea, acest tip de solicitare de rambursare este IQueryable

Așa cum am menționat anterior, deoarece IQueryable
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
Acest lucru înseamnă că LINQ interogări SQL sunt operații de interogare suplimentare, împreună cu operațiunile de interogare standard, deoarece IQueryable
LINQ interogări SQL sunt traduse în SQL
Deoarece LINQ SQL interogări returnează o secvență de tip IQueryable
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ă.