25
INPTP Pokročilé techniky programování (FEI UPa, 2016/2017)

INPTP přednáška 02b 2016

Embed Size (px)

Citation preview

INPTPPokročilé techniky programování (FEI UPa, 2016/2017)

Dotazy LINQ

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

Technologie LINQ

Příklad:

https://goo.gl/P0QYzD

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

Příklad:

https://goo.gl/8tVGLP

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íč.