Language INtegrated Query (LINQ) – część technologii Microsoft .NET, której podstawy teoretyczne zostały opracowane przez Erika Meijera. Technologia LINQ umożliwia zadawanie pytań na obiektach. Składnia języka LINQ jest prosta i przypomina SQL.

Opis działania LINQ stanowi warstwę abstrakcji nad różnymi źródłami danych. Baza danych i jej elementy traktowane są również jak obiekty. Przestrzenie, które obsługuje LINQ, to: obiekty implementujące interfejs IEnumerable<T> bazy danych język XML LINQ posiada pełne wsparcie dla transakcji, widoków oraz procedur składowanych. Zapytania stają się częścią języka .NET wspierającego .NET 3.5 (C#, Visual Basic, Delphi Prism itd.). Jeśli LINQ ma działać, musi znać mapę całej bazy danych. Zapytanie LINQ zwraca kolekcję z przestrzeni nazw typów ogólnych. Kolekcja ta może być modyfikowana, a następnie zwrócona do źródła. Dzięki temu zachowywana jest pełna kontrola typów danych i ich konwersji w poszczególnych mechanizmach pośredniczących w pobieraniu danych.

Standardowe operatory zapytań LINQ Select – operator ten jest używany, by wybrać z kolekcji odpowiedniego rodzaju dane (zbiory/podzbiory danego obiektu) SelectMany – jest używany, by dokonać wyświetlenia w przypadku relacji jeden-do-wielu, czyli jeśli obiekt w kolekcji zawiera inną kolekcję jako część danych, SelectMany będzie użyte do wybrania całej pod-kolekcji. Where – operator Where pozwala zdefiniować zbiór zasad dla każdego obiektu w kolekcji. Wszystkie te obiekty, które nie pasują do wybranej reguły, są odfiltrowywane. Sum – używany do otrzymywania sumy Min – używany do otrzymania minimalnej wartości Max – używany do otrzymania maksymalnej wartości Average – używany do otrzymania średniej Aggregate – używany do stworzenia wyrażenia agregującego wszystkie elementy w kolekcji Join – operator Join to operator bazujący na dwóch kolekcjach i tworzy z nich obiekt wynikowy. GroupJoin – operator dla dokonania połączenia grupowego. Tak jak w przypadku operatora Select, wynik łączenia jest instancją nowej klasy z wszystkimi członkami obiektów źródłowych lub ich podzbiorem. Take – operator Take jest używany do wybrania pierwszych n obiektów z kolekcji TakeWhile Skip SkipWhile OfType – operator używany do wybrania elementów konkretnego typu Concat – operator tworzący konkatenacje dwóch kolekcji OrderBy – sortuje wyniki po wybranym elemencie kolekcji – według określonego klucza OrderByDescending – sortuje w odwrotnej kolejności niż standardowo ThenBy – określa, po czym sortować w następnym etapie ThenByDescending Reverse – odwraca kolekcje GroupBy Distinct – usuwa duplikacje wartości kluczy w kolekcji Union – operacja 'suma' – zwraca połączone ze sobą dwie kolekcje Intersect – operacja 'iloczyn' – zwraca część wspólną dwóch kolekcji Except EqualAll – sprawdza, czy wszystkie elementy w kolekcji są takie same First – zwraca pierwszy element kolekcji FirstOrDefault – zwraca pierwszy element kolekcji lub NULL, gdy kolekcja jest pusta Last – zwraca ostatni element kolekcji LastOrDefault – zwraca ostatni element kolekcji lub NULL, gdy kolekcja jest pusta Single ElementAt – zwraca element o wybranym indeksie (index) z kolekcji Any – sprawdza, czy którykolwiek element kolekcji spełnia warunek podany w nawiasach All – sprawdza, czy wszystkie elementy kolekcji spełniają warunek podany w nawiasach Contains – sprawdza, czy kolekcja zawiera element podany w argumencie Count – zlicza elementy kolekcji

Przykład zapytania LINQ poza bazami danych Przykład wybrania w zapytaniu wszystkich obiektów z właściwością SomeProperty mniejszą niż 10 int someValue = 5; var results = from c in someCollection let x = someValue * 2 where c.SomeProperty < x select new {c.SomeProperty, c.OtherProperty};

foreach (var result in results) { Console.WriteLine(result); }

Ostatecznie kompilator wygeneruje klasę: IEnumerable<SomeOtherClass> results = someCollection.Where ( c => c.SomeProperty < (someValue * 2) ) .Select ( c => new {c.SomeProperty, c.OtherProperty} ); foreach (SomeOtherClass result in results) { Console.WriteLine(result.ToString()); }

Zobacz też SQL

Linki zewnętrzne Official Microsoft LINQ Project

Kategoria:.NET Kategoria:Języki zapytań