Upload
jan-hridel
View
104
Download
0
Embed Size (px)
Citation preview
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.
Technologie LINQ - syntaxe
dotazovací výraz: část_from tělo_dotazu
tělo_dotazu: části_těla_dotazunep část_select_group pokračování_dotazunep
části_těla_dotazu: část_těla_dotazu část_těla_dotazu části_těla_dotazu
Technologie LINQ - syntaxe
část_těla_dotazu: část_from část_let část_where část_join část_join_into část_orderby
část_select_group: část_select část_group
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();
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“.
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.
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.
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)
Technologie LINQ - část group
Část group slouží k seskupování výsledku dotazu podle klíče.
Syntaxe:
group výraz by klíč
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
Technologie LINQ - část where
Jedná se o nepovinnou část uvnitř těla dotazu. Slouží k filtrování zdrojové sekvence.
Syntaxe:where podmínka
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
Technologie LINQ - část orderby
Příklad:https://goo.gl/HmcSAn
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
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
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í.
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í.
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.
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í.
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íč.