6 LINQ Strana LINQ Václav Pachta

Podobné dokumenty
Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Ukládání a vyhledávání XML dat

LINQ. (Language integrated query) Prezentace na 3IT353. Zpracovali: Martin Latiak, Michal Pěnka, Petr Spurný

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Jakub Čermák Microsoft Student Partner

PG 9.5 novinky ve vývoji aplikací

Základní přehled SQL příkazů

Nové prvky v C# 3.0. David Keprt

Úvod do databázových systémů

Jazyk C# - přístup k datům

KIV/ZIS cvičení 5. Tomáš Potužák

Reaktivní programování v.net

Úvod do databázových systémů

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Kolekce, cyklus foreach

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Databázové systémy. Cvičení 6: SQL

Operátory ROLLUP a CUBE

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Databázové systémy Cvičení 5

PRG036 Technologie XML

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Úvod do databázových systémů

Kapitola 4: SQL. Základní struktura

9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD

Úvod do databázových systémů

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Databáze I. Přednáška 6

KAPITOLA 1 Představení platformy Microsoft SQL Server 2008

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

3. přednáška z předmětu GIS1 atributové a prostorové dotazy

DATA CUBE. Mgr. Jiří Helmich

Databázové systémy. Agregace, sumarizace, vnořené dotazy. Vilém Vychodil

Materializované pohledy

Informační systémy ve zdravotnictví. 8. cvičení

Databázové systémy I

OQL. (Object Query Language) Michal Bartoš Filip Bureš

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Formální sémantika SQL dotazování

Semestrální práce z DAS2 a WWW

Dotazovací jazyk pro řazená data

Jazyk C# (seminář 3)

6. blok část C Množinové operátory

Dolování v objektových datech. Ivana Rudolfová

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

8.2 Používání a tvorba databází

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

PŘETĚŽOVÁNÍ OPERÁTORŮ

XQuery. Jirka Kosek. Visual FoxPro DevCon června Praha. Copyright 2005 Jiří Kosek

Stopařův průvodce po ADO.NET a LINQ aneb Foxařův průvodce po práci s daty v.net Milan Kosina

JAVA. Další jazyky kompilovatelné do Java byte-code

9. přednáška - třídy, objekty

Návrh softwarových systém. Návrh softwarových systémů

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Úvod do programovacích jazyků (Java)

Multi-dimensional expressions

Tabulka fotbalové ligy

PRG036 Technologie XML

Dotazování v relačním modelu a SQL

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Databázové systémy. Dotazovací jazyk SQL - II

Programovací jazyk C# Verze jazyka 3.0

Programovací jazyk. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Programovací jazyk C# Verze jazyka 3.0

SQL - trigger, Databázové modelování

FlexiBee Pokročilé funkce. Ondřej Světlík FlexiBee Systems s.r.o.

Úvod do Entity Frameworku

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Spark SQL, Spark Streaming. Jan Hučín

Systémy řízení proudů dat

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Dotazování nad stromem abstraktní syntaxe

Informační systémy ve zdravotnictví. 6. cvičení

Zápis programu v jazyce C#

Kapitola 1 Začínáme se Silverlightem

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

SQL a XML jako alternativa ke klasickým unixovým nástrojům

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Algoritmizace a programování

Stopařův průvodce po ADO.NET a LINQ aneb Foxařův průvodce po práci s daty v.net Milan Kosina

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Tvorba informačních systémů

Databázové systémy Cvičení 5.3

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Jazyk C# - přístup k datům

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

Programování v jazyku C# II. 5.kapitola

Databáze SQL SELECT. David Hoksza

Informační systémy ve zdravotnictví. 10. cvičení

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 12.2.

TÉMATICKÝ OKRUH Softwarové inženýrství

Algoritmizace prostorových úloh

Spojový seznam. Jan Kybic.

Transkript:

6 Strana 1

Obsah přednášky Language integrated query Operátory Jak funguje? to XML to SQL / to Entities to... Strana 2

Language integrated query Podpora pro dotazování se do kolekcí a zdrojů dat (SQL, XML, JSON atd.) byl přidán až ve verzi 3.5.NET frameworku je typově bezpečný Odložené vyhodnocování Syntaxe: Fluent syntaxe pomocí extension metod Query syntaxe Strana 3

Fluent syntax Fluent interface Tvořeno pomocí extension metod nad IEnumerable Vstupem IEnumerable Specifický vstup pro jednotlivé operátory - lambda výraz / Func Výstup IEnumerable Strana 4

Fluent syntax příklad string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; IEnumerable<string> query = names.where(n => n.contains("a")).orderby(n => n.length).select(n => n.toupper()); foreach (string name in query) Console.WriteLine(name); Strana 5

Query syntax Tvořeno pomocí klíčových slov: Seznam klíčových slov najdeme v dokumentaci: https://msdn.microsoft.com/en-us/library/bb310804.aspx string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; IEnumerable<string> query = from n in names where n.contains("a") // Filter elements orderby n.length // Sort elements select n.toupper(); // Translate each element (project) Strana 6

Query syntax Strana 7

Fluent syntax vs Query syntax Obě syntaxe mají své výhody i nevýhody Je možné je kombinovat Query syntaxe má snazší zápis v případech: Při použití let pro vytvoření nové proměnné v rámci dotazu Při SelectMany, Join, GroupJoin pokud potřebujeme použít vnější proměnnou Fluent syntaxe je snazší v případě: Kdy používáme pouze jeden operátor Některé operátory existují pouze v Fluent syntaxi. Strana 8

Poddotazy - subqueries dotazy je možné použít i uvnitř dotazů např. v lambda výrazu var musos = { "David Gilmour", "Roger Waters", "Rick Wright", "Nick Mason" }; IEnumerable<string> query = musos.orderby(m => m.split().last()); var query = from m in musos orderby m.split().last() select m; Strana 9

Operátory Opátory můžeme rozdělit dle vstupu a výstupu na tři kategorie: Sequence in > sequence out Sequence in > single element or scalar value out Nothing in > Sequence out Dokumentace pro všechny operátory: https://msdn.microsoft.com/enus/library/vstudio/system.linq.enumerable_methods(v=vs.100).aspx Strana 10

opetátory Filtrování Metoda Where Take Skip TakeWhile SkipWhile Distinct Popis Vrací podmnožinu splňující danou podmínku Vrací podmnožinu o daném počtu prvků Přeskočí prvních x prvků a vrací zbývající prvky Vrací prvky dokud splňují danou podmínku Přeskakuje prvky dokud je splňena daná podmínka a vrací zvývající prvky Vrátí podmnožinu, ve které nejsou duplicitní objekty Strana 11

opetátory Projekce Metoda Select SelectMany Popis Transformuje každý prvek na vstupu pomocí daného výrazu Transformuje každý prvek na vstupu a provede konkatenaci vstupních kolekcí Joining Metoda Join GroupJoin Zip Popis Spojí dvě sekvence do ploché struktury Spojí dvě sekvence do hierarchické struktury Prochází obě sekvence a provádí funkci na prvkcích z obou sekvencí Strana 12

opetátory Řazení Metoda OrderBy, ThenBy OrdeByDescending, ThenByDescending Reverse Popis Seřadí sekvenci vzestupně Seřadí sekvenci sestupně Otočí pořadí sekvence Seskupování - Grouping Metoda GroupBy Popis Seskupí sekvenci do podsekvencí Strana 13

opetátory Množinové operace Metoda Popis Concat Spojí dvě sekvence druhou dá za první Union Spojí dvě sekvence s vynecháním duplicitních prvků Intersect Vrací prvky obsažené v obou sekvencích Except Vrací prvky obsažené v první, ale ne v druhé sekvenci Strana 14

opetátory Konverze Metoda Popis OfType Převede typ prvků sekvence, vynechává chybně Cast Převede typ prvků sekvence, vyvolá vyjímku v případě chyby ToArray Převede IEnumerable<T> na pole T[] ToList Převede IEnumerable<T> na List<T> ToDictionary Převede IEnumerable<T> na IDictionary<Tkey, TElement> ToLookup Převede IEnumerable<T> na ILookup<Tkey, TElement> AsEnumerable Provede downcast na IEnumerable<T> AsQueryable Provede přetypování nebo konverzi na IQueryable<T> Strana 15

opetátory Element operators Metoda First, FirstOrDefault Last, LastOrDefault Popis Vrací první element sekvence Vrací poslední element sekvence Single, SingleOrDefault Vrací první element sekvence, vyvolá vyjímku v případě, kdy kolekce obsahuje více prvků ElementAt, ElementAtOrDefault DefaultIfEmpty Vrací prvek na dané pozici Vrací sekvenci s jedním prvkem default(t) pokud je vstupní sekvence prázdná, jinak vrací původní sekvenci Strana 16

opetátory Agregace Metoda Count, LongCount Min, Max Sum, Average Aggregate Podmínky Metoda Contains Any All SequenceEquals Popis Vrací počet prvků v sekvenci Vrací minimální / maximální prvek ze sekvence Spočítá sumaci / průměr prvů v sekvenci Spustí námi specifikovanou agregaci Popis Vrací true pokud sekvence obsahuje daný prvek Vrací true pokud min. jeden prvek splňuje danou podmínku Vrací true pokud všechy prvky splňují danou podmínku Vrací true pokud je sekvence shodná s druhou sekvencí Strana 17

opetátory Generování Metoda Empty Repeat Range Popis Vytvoří prázdnou sekvenci Vytvoří sekvenci opakující daný prvek Vytvoří sekvenci celočíselných hodnot Strana 18

Jak funguje? Ukázka toho jak lze vytvořit vlastní implementaci : http://codeblog.jonskeet.uk/category/edulinq/ Jak naimplementovat např Where? public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate) {... Check of input parameters... foreach (TSource item in source) { if (predicate(item)) { yield return item; } } } Strana 19

to XML Přístup k XML v.net XmlReader / XmlWriter - čte / zapisuje přímo do streamu XmlDocument to XML Načtení XML pomocí to XML var xmldocument = XDocument.Load("Customers.xml") Vytvoření XML pomocí to XML var element = new XElement ("customer", new XAttribute ("id", 123), new XElement ("firstname", "joe"), new XElement ("lastname", "bloggs", new XComment ("nice name")) ); <customer id="123"> <firstname>joe</firstname> <lastname>bloggs <!--nice name--></lastname> </customer> Strana 20

to XML přehled tříd Strana 21

to SQL, to Entities (Entity Framework) ORM Objektově relační mapování Převádí dotazu na SQL dotaz to SQL Vygenerované třídy pro přístup k databázi Entity Framework Možnost vygenerování tříd pro přístup k databázi Vlastní třídy namapované na tabulky v databázi Code first přístup Strana 22

to... P Paralel to NHibernate to Sharepoint to ActiveDirectory to JSON to SNMP to Wikipedia to Twitter to FQL (Facebook Query Language)... Strana 23

Kontakt Bc. Siemens CT DC / Sitraff Team Olomoucká 7/9 618 00 Brno Česká republika E-mail: vaclav.pachta@siemens.com Strana 24

Reference http://www.amazon.com/5-0-nutshell-the-definitive-reference/dp/1449320104 https://msdn.microsoft.com/en-us/library/bb310804.aspx https://msdn.microsoft.com/enus/library/vstudio/system.linq.enumerable_methods(v=vs.100).aspx http://codeblog.jonskeet.uk/category/edulinq/ https://code.msdn.microsoft.com/101--samples-3fb9811b http://en.wikipedia.org/wiki/language_integrated_query Strana 25