SlideShare a Scribd company logo
INPTP
Pokroč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íč.

More Related Content

What's hot (8)

KST/ICSHP - 1. přednáška
KST/ICSHP - 1. přednáškaKST/ICSHP - 1. přednáška
KST/ICSHP - 1. přednáška
 
KST/ICSHP - 3. a 4. přednáška
KST/ICSHP - 3. a 4. přednáškaKST/ICSHP - 3. a 4. přednáška
KST/ICSHP - 3. a 4. přednáška
 
KST/ICSHP - 5. a 6. přednáška
KST/ICSHP - 5. a 6. přednáškaKST/ICSHP - 5. a 6. přednáška
KST/ICSHP - 5. a 6. přednáška
 
KST/ICSHP - 2. přednáška
KST/ICSHP - 2. přednáškaKST/ICSHP - 2. přednáška
KST/ICSHP - 2. přednáška
 
Linq
LinqLinq
Linq
 
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015
 
Java – Annotations
Java – AnnotationsJava – Annotations
Java – Annotations
 
Nette Tester / Posobota
Nette Tester / PosobotaNette Tester / Posobota
Nette Tester / Posobota
 

Recently uploaded

Recently uploaded (10)

PPC Restart 2024: David Janoušek - Nepostradatelné dovednosti marketéra v roc...
PPC Restart 2024: David Janoušek - Nepostradatelné dovednosti marketéra v roc...PPC Restart 2024: David Janoušek - Nepostradatelné dovednosti marketéra v roc...
PPC Restart 2024: David Janoušek - Nepostradatelné dovednosti marketéra v roc...
 
PPC Restart 2024: Jan Tichý - Dejte sbohem 3rd party cookies
PPC Restart 2024: Jan Tichý - Dejte sbohem 3rd party cookiesPPC Restart 2024: Jan Tichý - Dejte sbohem 3rd party cookies
PPC Restart 2024: Jan Tichý - Dejte sbohem 3rd party cookies
 
PPC Restart 2024: Jiří Hradský - Využívání dat pro PPC z pohledu práva
PPC Restart 2024: Jiří Hradský - Využívání dat pro PPC z pohledu právaPPC Restart 2024: Jiří Hradský - Využívání dat pro PPC z pohledu práva
PPC Restart 2024: Jiří Hradský - Využívání dat pro PPC z pohledu práva
 
PPC Restart 2024: Zuzana Slepánková - Od experta k lídrovi: cesta k úspěšném...
PPC Restart 2024: Zuzana Slepánková -  Od experta k lídrovi: cesta k úspěšném...PPC Restart 2024: Zuzana Slepánková -  Od experta k lídrovi: cesta k úspěšném...
PPC Restart 2024: Zuzana Slepánková - Od experta k lídrovi: cesta k úspěšném...
 
PPC Restart 2024: Petr Bureš - Jak zbytečně nepálit peníze za špatný traffic?
PPC Restart 2024: Petr Bureš - Jak zbytečně nepálit peníze za špatný traffic?PPC Restart 2024: Petr Bureš - Jak zbytečně nepálit peníze za špatný traffic?
PPC Restart 2024: Petr Bureš - Jak zbytečně nepálit peníze za špatný traffic?
 
PPC Restart 2024: Jiří Markytán - Pokročilé optimalizační metody: Nový standa...
PPC Restart 2024: Jiří Markytán - Pokročilé optimalizační metody: Nový standa...PPC Restart 2024: Jiří Markytán - Pokročilé optimalizační metody: Nový standa...
PPC Restart 2024: Jiří Markytán - Pokročilé optimalizační metody: Nový standa...
 
PPC Restart 2024: Roman Doležal - Jde to i bez cookies?
PPC Restart 2024: Roman Doležal - Jde to i bez cookies?PPC Restart 2024: Roman Doležal - Jde to i bez cookies?
PPC Restart 2024: Roman Doležal - Jde to i bez cookies?
 
PPC Restart 2024: Vít Janda - E-commerce a Generace Z pohledem výkonnostního ...
PPC Restart 2024: Vít Janda - E-commerce a Generace Z pohledem výkonnostního ...PPC Restart 2024: Vít Janda - E-commerce a Generace Z pohledem výkonnostního ...
PPC Restart 2024: Vít Janda - E-commerce a Generace Z pohledem výkonnostního ...
 
PPC Restart 2024: Vít Rutkovský - Jak AI a hluboké učení transformují persona...
PPC Restart 2024: Vít Rutkovský - Jak AI a hluboké učení transformují persona...PPC Restart 2024: Vít Rutkovský - Jak AI a hluboké učení transformují persona...
PPC Restart 2024: Vít Rutkovský - Jak AI a hluboké učení transformují persona...
 
PPC Restart 2024: Aneta Holá - Příprava na konec 3rd party cookies z pohledu...
PPC Restart 2024: Aneta Holá -  Příprava na konec 3rd party cookies z pohledu...PPC Restart 2024: Aneta Holá -  Příprava na konec 3rd party cookies z pohledu...
PPC Restart 2024: Aneta Holá - Příprava na konec 3rd party cookies z pohledu...
 

INPTP přednáška 02b 2016

  • 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.
  • 6. 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
  • 7. 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
  • 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
  • 18. Technologie LINQ - část orderby Příklad: https://goo.gl/HmcSAn
  • 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íč.