LINQ
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.
Spis treści |
Jak działa LINQ? [edytuj]
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 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]
- 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]
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]
Linki zewnętrzne [edytuj]
- Official Microsoft LINQ Project
- 101 C# LINQ Samples
- 101 Visual Basic LINQ Samples
- LINQ to XML Documentation
- Microsoft LINQ forum
- Linq to Objects for the .NET developer
- LINQ wiki
- LINQ books
- Continuous LINQ
- LINQ To Sharepoint
- LINQ To Active Directory
- LINQ for Novell.Directory.Ldap
- Linq Tutorials and Active Articles
- Looking to LINQ - Will Microsoft's Language Integrated Query transform programmatic data access?
- Obtics (Observable Object LINQ)
- LINQ to SNMP
- Different Ways Of Retrieving Data From Collections
- LINQ Exchange - Learn LINQ and Lambda Expressions