Co to jest zapytanie zintegrowane językowo?

Zapytanie zintegrowane z językiem (LINQ) zapewnia możliwość bezproblemowej integracji deklaratywnej składni zapytań z językami imperatywnymi, głównie C# i VB.NET. Rozwój LINQ rozwiązał problemy, jakie programiści pracujący w środowiskach obiektowych napotykali podczas wykonywania zapytań. Został wprowadzony jako część Microsoft® .NET Framework w wersji 3.5 w listopadzie 2007 roku oraz w Visual Studio® o nazwie kodowej „Orcas”.

Przed utworzeniem zapytań zintegrowanych z językiem, języki .NET nie miały natywnego sposobu wysyłania zapytań do relacyjnych baz danych lub dokumentów XML. Deweloperzy piszący w tych językach musieli osadzić SQL lub XQuery odpowiednio jako ciągi i ręcznie mapować dane wynikowe do obiektów .NET. Nie można sprawdzić poprawności osadzonych ciągów zapytań i mapowań przez kompilatory platformy .NET, co umożliwia wykrywanie potencjalnych błędów w czasie wykonywania.

Innym problemem, z jakim musieli się zmierzyć programiści przed zapytaniami zintegrowanymi z językiem, był fakt, że języki .NET miały tylko składnię zorientowaną na obiekt, służącą do zapytań w kolekcjach obiektów .NET. Zazwyczaj programista iteruje po całej kolekcji źródłowej, tworząc nowe kolekcje wyników na podstawie kryteriów wyszukiwania. Deweloper może również przekształcić dane podczas budowania kolekcji wyników. Takie podejście było kłopotliwe; proste zapytanie wybierające napisane w języku C# lub VB wymagałoby co najmniej pięciu wierszy kodu, podczas gdy to samo zapytanie wymagałoby jednego wiersza kodu w języku zapytań.

Wyzwania związane z wykonywaniem zapytań w środowisku obiektowym dały firmie Microsoft impuls do stworzenia LINQ. LINQ zapewnia składnię zapytania przypominającą SQL, która ma być używana w połączeniu z C# lub VB, wraz ze sprawdzaniem typu statycznego. Podczas wykonywania zapytań dotyczących kolekcji .NET zamiast używania pętli zagnieżdżonych deweloperzy mogą używać składni LINQ do wybierania elementów i przekształcania danych. Wśród innych zalet skutkuje to mniejszą liczbą wierszy kodu w porównaniu ze składnią czysto obiektową.

Podczas uzyskiwania dostępu do zewnętrznych źródeł danych LINQ i składniki pomocnicze eliminują potrzebę osadzonych języków zapytań i mapowań danych w samym języku .NET. Aby wykonać mapowanie danych, LINQ zależy od składników zwanych dostawcami LINQ. LINQ-to-Objects to dostawca zapasów, który umożliwia LINQ dostęp do kolekcji .NET. Podobnie istnieją dostawcy dostępu do relacyjnych baz danych i dokumentów XML. Większość z tych dostawców to składniki innych firm, które nie są zawarte w .NET Framework. Niezależnie od używanego dostawcy wszystkie zapytania używają tej samej składni LINQ.

Między zintegrowaną składnią zapytań językowych a dostawcami znajduje się biblioteka operatorów zapytań dodana do .NET Framework jako część udogodnień LINQ. Operatory te wykonują takie zadania, jak filtrowanie, porządkowanie, operacje na teorii mnogości i agregacja. Ponieważ operatory te są częścią .NET Framework, mogą być również używane bez LINQ, jeśli deweloper tak zdecyduje.