Co to jest zapytanie zintegrowane językowo?
Zapytanie zintegrowane językowo (LINQ) umożliwia płynną integrację deklaratywnej składni zapytania z imperatywnymi językami, głównie C # i VB.NET. Rozwój LINQ rozwiązał problemy programistów pracujących w środowiskach obiektowych napotykane podczas wykonywania zapytań. Został wprowadzony jako część Microsoft® .NET Framework wersja 3.5 w listopadzie 2007 r. Oraz w programie Visual Studio® o nazwie kodowej „Orcas”.
Przed utworzeniem zapytania zintegrowanego z językiem, języki .NET nie miały natywnego sposobu na zapytanie do relacyjnych baz danych lub dokumentów XML. Programiści piszący w tych językach musieli osadzić odpowiednio SQL lub XQuery jako ciągi i ręcznie mapować uzyskane dane na obiekty .NET. Osadzone ciągi zapytań i odwzorowania nie mogły zostać sprawdzone przez kompilatory .NET, umożliwiając wykrycie potencjalnych błędów w czasie wykonywania.
Innym problemem, przed którym stanęli programiści przed zapytaniem zintegrowanym z językiem, było to, że języki .NET miały składnię zorientowaną obiektowo tylko na zapytania do kolekcji obiektów .NET. Zazwyczaj programista iterowałby całą kolekcję źródeł, budując nowe kolekcje wyników na podstawie kryteriów wyszukiwania. Deweloper może również przekształcać dane podczas budowania kolekcji wyników. To podejście było kłopotliwe; proste zapytanie selekcyjne napisane w 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 zapytaniami w środowisku obiektowym dały Microsoft impuls do stworzenia LINQ. LINQ zapewnia składnię zapytania przypominającą SQL, która ma być używana w trybie C # lub VB, wraz ze statycznym sprawdzaniem typu. Podczas sprawdzania kolekcji .NET zamiast używać zagnieżdżonych pętli, programiści mogą używać składni LINQ do wybierania elementów i przekształcania danych. Wśród innych zalet powoduje to mniej wierszy kodu w porównaniu do składni czysto obiektowej.
Podczas uzyskiwania dostępu do zewnętrznych źródeł danych LINQ i komponenty wspierające eliminują potrzebę osadzonych języków zapytań i odwzorowań danych w samym języku .NET. Aby wykonać mapowanie danych, LINQ zależy od komponentów zwanych dostawcami LINQ. LINQ-to-Objects to dostawca akcji, 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ść tych dostawców to komponenty innych firm, które nie są uwzględnione w .NET Framework. Bez względu na użytego dostawcę wszystkie zapytania wykorzystują tę samą składnię LINQ.
Pomiędzy językową składnią zapytań a dostawcami znajduje się biblioteka operatorów zapytań dodana do .NET Framework jako część funkcji LINQ. Operatorzy ci wykonują takie zadania, jak filtrowanie, porządkowanie, operacje teorii zbiorów i agregacja. Ponieważ operatorzy ci są częścią systemu .NET Framework, można ich także używać bez LINQ, jeśli programista tak zdecyduje.