3. Technologie LINQ
Dotazovací jazyk pro získání potřebných dat z určitého zdroje (databáze, XML
soubory, kolekce v paměti, …)
Integrovány přímo do programovacího jazyka
● Kontrola už v době překladu.
8. Technologie LINQ - syntaxe, ukázka
int maximum = (from cislo in cisla
where cislo % 2 == 1
orderby cislo
select cislo).Max();
List<int> lichaCislaList = (from cislo in cisla
where cislo % 2 == 1
orderby cislo
select cislo).ToList();
9. Technologie LINQ - doporučení
Doporučuje se, aby jméno dotazovací proměnné obsahovalo slovo „query“,
např. lichaCislaQuery zatímco proměnné, které neobsahují dotaz, ale
skutečnou hodnotu, nemají obsahovat ve svém jménu slovo „query“.
10. Technologie LINQ - část from
část_from:
from typnep
identifikátor in výraz_sekvence
Výraz_sekvence – výraz, jehož výsledkem je zdrojová sekvence.
12. Technologie LINQ - část select
Část select produkuje výsledek dotazu a specifikuje typ prvku výsledné
sekvence. Pokud výsledkem této části je jiný typ než je typ prvku zdrojové
sekvence, operace se nazývá projekce.
13. Technologie LINQ - část select
Syntaxe:
select výraz
Dotazovací výraz ve tvaru
from x in e select v
je přeložen do tvaru
(e).Select(x => v)
14. Technologie LINQ - část group
Část group slouží k seskupování výsledku dotazu podle klíče.
Syntaxe:
group výraz by klíč
15. Technologie LINQ - pokračování dotazu
Za částí select nebo group může následovat nepovinná část pokračování
dotazu.
Syntaxe:
into identifikátor tělo_dotazu
Příklad:
https://goo.gl/uuFu6q
16. Technologie LINQ - část where
Jedná se o nepovinnou část uvnitř těla dotazu. Slouží k filtrování zdrojové
sekvence.
Syntaxe:
where podmínka
17. Technologie LINQ - část orderby
Jedná se o nepovinnou část uvnitř těla dotazu. Slouží k seřazení sekvence.
Syntaxe:
orderby klíče_řazení
klíče_řazení:
klíč_řazení[, klíč_řazení]
klíč_řazení:
klíč směr_řazenínep
19. Technologie LINQ - část let
Jedná se o nepovinnou část uvnitř těla dotazu. Slouží k uložení výsledku
nějakého výrazu, např. výsledku volání metody do nové proměnné rozsahu.
Syntaxe:
let identifikátor = výraz
Příklad:
https://goo.gl/22xsI1
20. Technologie LINQ - část join
Jedná se o nepovinnou část uvnitř těla dotazu. Slouží k spojení prvků zdrojové
sekvence s prvky druhé (podřízené) sekvence odlišného typu.
Syntaxe:
join typnep
identifikátor in výraz_sekvence on klíč1 equals klíč2
21. Technologie LINQ - část join
Příklad:
https://goo.gl/li2y4T
Je dáno pole vydavatelů a pole knih. Každá kniha obsahuje číslo vydavatele.
Pomocí metody Join se vytvoří sekvence všech vydavatelů a jejich knih
obsahující jako prvek anonymní typ s vlastnostmi název vydavatele, autor a
název knihy. Vydavatel, který nemá žádnou knihu, se do výsledné sekvence
nezařadí.
22. Technologie LINQ - část join into
Jedná se o nepovinnou část uvnitř těla dotazu. Stejně jako část join slouží k
spojení prvků jedné sekvence s prvky druhé (podřízené) sekvence odlišného
typu. Prvky obou sekvencí musí obsahovat společný klíč, podle kterého se
prvky spojují.
Jejím výsledkem je ale hierarchická sekvence – sekvence podřízených
sekvencí. Tento typ spojování se nazývá skupinové spojování (angl. group
join). Pokud klíč určitého prvku zdrojové sekvence neosahuje žádný prvek
druhé sekvence, tento prvek se do výsledné sekvence zařadí.
23. Technologie LINQ - část join into
Syntaxe:
join typnep
identifikátor in výraz_sekvence on klíč1 equals klíč2 into identifikátor2
Význam symbolů je stejný jako v části join. Výsledkem je však hierarchická
sekvence. Identifikátor2 reprezentuje jméno podřízené sekvence.
24. Technologie LINQ - část join into
Příklad:
https://goo.gl/7Qrb1h
Příklad obsahuje stejné pole vydavatelů a knih jako příklad v kapitole „Část
join“. Vydavatel, který nemá žádnou knihu, se do výsledné sekvence zařadí.
25. Technologie LINQ - Použití indexu prvku
zdrojové sekvence v dotazu
V dotazu LINQ neexistuje přímá možnost pro získání indexu prvku zdrojové
sekvence. Problém lze řešit deklarací lokální proměnné indexu před dotazem, v
němž se proměnná indexu bude inkrementovat. Před každým vykonáním
dotazu se však proměnná indexu musí vynulovat.
Příklad:
https://goo.gl/AQzZL4
Příklad demonstruje použití indexu prvku zdrojové sekvence v dotazovacím
výrazu pro spojení dvou polí, které nemají společný klíč.