LINQ

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Language INtegrated Query (LINQ) – część technologii Microsoft .NET, która została opracowana przez Andersa Hejlsberga – znanego z zaprojektowania języka Delphi i języka C#. Technologia LINQ umożliwia zadawanie pytań na obiektach. Składnia języka LINQ jest prosta i przypomina SQL.

Jak działa LINQ?[edytuj | edytuj kod]

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:

  1. Obiekty implementujące interfejs IEnumerable<T>
  2. Bazy danych
  3. Język XML

LINQ posiada pełne wsparcie dla transakcji, widoków oraz procedur przechowanych. 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[edytuj | edytuj kod]

  • 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[edytuj | edytuj kod]

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ż[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]