LINQ

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:

  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 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ż

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.