Interogare integrată în limbaj (LINQ) oferă capacitatea de a integra perfect sintaxa interogării declarative în limbaje imperative, în primul rând C# și VB.NET. Dezvoltarea LINQ a rezolvat problemele întâlnite de dezvoltatorii care lucrează în medii orientate pe obiecte atunci când efectuează interogări. A fost introdus ca parte a Microsoft® .NET Framework versiunea 3.5 în noiembrie 2007 și în numele de cod Visual Studio® „Orcas”.
Înainte de crearea interogărilor integrate de limbaj, limbile .NET nu aveau o modalitate nativă de a interoga bazele de date relaționale sau documentele XML. Dezvoltatorii care scriau în aceste limbi au trebuit să încorporeze SQL sau, respectiv, XQuery ca șiruri de caractere și să mapeze manual datele rezultate la obiecte .NET. Șirurile de interogări și mapările încorporate nu au putut fi validate de către compilatorii .NET, permițând descoperirea potențialelor erori în timpul rulării.
O altă problemă cu care se confruntă dezvoltatorii înainte de interogarea integrată a limbajului a fost aceea că limbajele .NET aveau doar sintaxă orientată către obiecte pentru a interoga colecțiile de obiecte .NET. De obicei, dezvoltatorul itera pe o întreagă colecție sursă, construind noi colecții de rezultate pe baza criteriilor de căutare. Dezvoltatorul ar putea, de asemenea, transforma datele în timp ce construiește colecțiile de rezultate. Această abordare a fost greoaie; o simplă interogare de selecție scrisă în C# sau VB ar necesita cel puțin cinci linii de cod, în timp ce aceeași interogare ar necesita o linie de cod într-un limbaj de interogare.
Provocările de interogare într-un mediu orientat pe obiecte au dat Microsoft impulsul de a crea LINQ. LINQ oferă o sintaxă de interogare care amintește de SQL pentru a fi utilizată în linie cu C# sau VB, completă cu verificarea tipului static. Când interogând colecțiile .NET, în loc să folosească bucle imbricate, dezvoltatorii pot folosi sintaxa LINQ pentru a selecta elemente și a transforma datele. Printre alte avantaje, acest lucru are ca rezultat mai puține linii de cod în comparație cu sintaxa pur orientată pe obiecte.
La accesarea surselor de date externe, LINQ și componentele de suport elimină nevoia de limbaje de interogare încorporate și mapări de date într-un limbaj .NET în sine. Pentru a efectua maparea datelor, LINQ depinde de componente numite furnizori LINQ. LINQ-to-Objects este furnizorul de stoc care permite LINQ să acceseze colecțiile .NET. În mod similar, există furnizori pentru a accesa baze de date relaționale și documente XML. Majoritatea acestor furnizori sunt componente terțe care nu sunt incluse în .NET Framework. Indiferent de furnizorul utilizat, toate interogările folosesc aceeași sintaxă LINQ.
Între sintaxa de interogare integrată în limbaj și furnizori se află o bibliotecă de operatori de interogare adăugate la .NET Framework ca parte a facilităților LINQ. Acești operatori efectuează sarcini precum filtrarea, ordonarea, operațiile de teorie a seturilor și agregarea. Deoarece acești operatori fac parte din .NET Framework, ei pot fi utilizați și fără LINQ dacă dezvoltatorul alege acest lucru.