Introducere în interogări LINQ (c #)

Cererea este o expresie care preia date de la sursa de date. Interogările sunt de obicei exprimate într-un limbaj special de interogare. De-a lungul timpului, au dezvoltat diferite limbi pentru diferite tipuri de surse de date, cum ar fi SQL pentru baze de date relaționale și XQuery pentru XML. Astfel, dezvoltatorii sunt nevoiți să învețe o nouă limbă de interogare pentru fiecare tip de sursă de date sau format de date de care au nevoie pentru a sprijini. LINQ simplifică situația prin oferirea unui model coerent pentru lucrul cu date într-o varietate de surse de date și formate. Lucrarea de interogare LINQ este întotdeauna efectuată cu obiectele. Pentru interogări și transformări de date în XML-documente, bazele de date SQL, seturile de date ADO.NET, colecții .NET și orice alt format pentru care furnizorul de LINQ este disponibil, utilizați aceleași modele de codificare de bază.

Următoarea figură prezintă cererea de funcționare completă. Executia de interogare LINQ este diferită de interogare; cu alte cuvinte, crearea variabilei de interogare în sine nu este legată de achiziția de date.

Introducere în interogări LINQ (c #)

În exemplul anterior, sursa de date este o matrice, astfel încât acesta susține implicit interfața IEnumerable generică . Acest lucru înseamnă că este posibil să se execute interogări cu LINQ. Interogarea este executată în declarația foreach. foreach și operatorul este obligat IEnumerable sau interfața IEnumerable . Tipurile care acceptă IEnumerable sau derivați de interfețe, cum ar fi o interfață universală IQueryable . Ei au numit tipuri de queryable.

Pentru servire de tip solicitat ca sursă de date LINQ nu necesită modificări sau speciale de manipulare. În cazul în care datele sursă nu se află deja în memorie sub forma de tipul solicitat, furnizorul LINQ este să-l prezinte ca atare. De exemplu, LINQ XML încarcă XML documentul tip solicitat XElement.

Folosind LINQ SQL, creați mai întâi o mapare relațională-obiect în modul de dezvoltare manual sau prin utilizarea Object Designer relational. Scrie cereri de obiecte și run-time LINQ to SQL va interacționa cu baza de date. Clienții Următorul exemplu este un tabel specific în baza de date, precum și tipul de rezultate de interogare IQueryable moștenește de la IEnumerable .

Pentru mai multe informații despre modul de a crea anumite tipuri de surse de date, a se vedea. Documentația pentru diferiți furnizori LINQ. Regula de bază este foarte simplu: o sursă de date LINQ - este orice obiect care suportă o interfață universală IEnumerable sau interfață, moștenit de la el.

Tipurile precum ArrayList. nonuniversal suporta interfata IEnumerable. Acesta poate fi, de asemenea, utilizate ca surse de date LINQ. Pentru mai multe informații, consultați. În modul în care. Rularea o interogare cu un ArrayList cu LINQ.

Cererea indică tipul de informații pe care doriți să extrageți de la sursa sau sursele de date. Dacă este necesar, cererea specifică, de asemenea, metoda de sortare, precum și formarea de grupuri de astfel de informații înainte de a reveni. Cererea este stocată într-o interogare variabilă și de expresie de interogare este inițializată. Pentru a face mai ușor pentru a scrie interogări în C #, o nouă sintaxă interogare.

Cererea din primul exemplu returnează toate numerele chiar și dintr-o serie de numere întregi. expresie de interogare conține trei propuneri: de la. unde și selectați. (Dacă știți SQL, vă rețineți că procedura oferă ordine inversă în SQL.) Din clauza specifica sursa de date, în cazul în care clauza clauză se aplică un filtru, iar clauza select specifică tipul elementelor returnate. Acestea și alte propuneri interogări descrise în detaliu în LINQ Query Expresiile (Ghid de programare C #). Este important ca interogarea variabila LINQ în sine nu ia nici o acțiune și nu returnează date. Este pur și simplu stochează informațiile necesare pentru a furniza rezultatele data viitoare când executați interogarea. Pentru mai multe informații despre construirea interogări, a se vedea. În înțelegerea operatorilor de interogare Standard.

Interogările pot fi exprimate, de asemenea, prin utilizarea metodei de sintaxă. Pentru mai multe informații, consultați. În secțiunea compararea LINQ sintaxă interogare și sintaxă metoda (C #).

executare amânată

Așa cum am menționat mai devreme, variabila de interogare în sine stochează doar comenzile de interogare. Executarea efectivă a cererii este amânată până când itera variabila de interogare într-o declarație foreach. Acest concept se referă la executarea ca amânate. se arată în exemplul următor.

Declarația foreach este, de asemenea, locul în care rezultatele interogării sunt recuperate. De exemplu, variabila anterioară query num conține fiecare iterație (la rândul său), valoarea în secvența returnată.

Deoarece variabila de interogare în sine conține niciodată rezultatele interogării, aceasta poate fi efectuată ori de câte ori este necesar. De exemplu, în cazul în care baza de date este actualizată în mod continuu aplicație separată. Aplicația poate crea o interogare care preia cele mai recente date, și poate fi realizată din nou cu un anumit interval pentru a prelua rezultate diferite de fiecare dată.

Executarea silită imediată

Interogările care îndeplinesc funcții de agregare într-un interval de elemente sursă trebuie să itera mai întâi aceste elemente. Exemple de astfel de cereri sunt conta. Max. Media, și mai întâi. Ele sunt executate fără un operator de foreach explicit. deoarece cererea în sine trebuie să utilizeze foreach pentru a returna un rezultat. Vă rugăm să rețineți că acest tip de interogare returnează o singură valoare, nu o colecție de IEnumerable. Următoarea interogare returnează numărul de numere chiar și în matrice sursă.