160 likes | 319 Views
LINQ (1). LINQ ( L anguage In tegrated Q uery) je součást MS .NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-ním a funkcionálním způsobem Představuje dotazovací jazyk (podobný SQL), který je integrovaný přímo do syntaxe jazyka C #
E N D
LINQ (1) • LINQ (Language Integrated Query) je součást MS .NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-ním a funkcionálním způsobem • Představuje dotazovací jazyk (podobný SQL), který je integrovaný přímo do syntaxe jazyka C# • Poskytuje syntaktickou kontrolu dotazů v době překladu programu • Mezi výhody technologie LINQ patří zejména: • zjednodušení a zpřehlednění programového kódu • jednotná forma práce s různě reprezentovanými daty
LINQ (2) • LINQ: • přináší nový způsob pro dotazování nad různě repre-zentovanými daty • usnadňuje: • jejich třídění • jejich propojování • vyhledávání v nich • Zpracovávaná data mohou být uložena např. v: • polích • kolekcích odvozených od generického rozhraní IEnumerable<T> • XML • SQL databázích
LINQ(3) • Zpřehlednění práce s daty pomocí LINQ je v ja-zyku C# dosaženo prostřednictvím: • implicitně typovaných proměnných: • definované pomocí klíčového slova var (bez použití identifikátoru označujícího datový typ) • v době definice musí být provedena i jejich inicializace • představují silně typované proměnné • jejich typ je určen z pravé strany inicializace • příklad: vardistance = 20;//int • inicializátorů objektů: • umožňují v době vytváření objektů nastavit jejich vlast-nosti a datové položky (bez nutnosti použití specifického konstruktoru) • příklad: Dog dog=new Dog{Name=”Rex”,Age=5};
LINQ(4) • inicializátorů kolekcí: • dovolují v době volání konstruktoru kolekce uvést seznam objektů • kolekce musí implementovat rozhraní IEnumerablea obsahovat metodu Add pro vložení položky • příklad:IList<int> nums=newList<int>(){1,2,3,4,5}; • anonymních typů: • slouží k zapouzdření proměnných bez nutnosti deklarovat datový typ • obsahují jednu nebo více vlastností, které se nastaví při vytvoření instance a dále slouží jen ke čtení
LINQ(5) • lze je deklarovat jen pomocí implicitně typované proměn-né(var) • vlastnosti se určí z objektové inicializace • příklad: varRex=new{Name="Rex",Age=5}; • lambda výrazů: • jednodušší forma zápisu anonymních metod • rozšiřujících metod: • metody rozšiřující již existující datové typy (třídy nebo struktury) dodatečnými statickými metodami • Překlad z dotazu LINQ na dotaz pro konkrétní platformu je realizovaný pomocí tzv. LINQ (po-skytovatelů) providers
LINQ(6) • Mezi nejčastěji používané poskytovatele techno-logie LINQ patří: • LINQ to Objects: • slouží k práci s libovolnou kolekcí (polem), která imple-mentuje rozhraní IEnumerable<T> • LINQ to SQL: • mapuje příkazy LINQ na dotazy SQL a umožňuje práci s MS SQL Server a MS SQL Express • LINQ to DataSet: • používá technologii ADO .NET pro komunikaci s databá-zemi • LINQ to XML: • umožňuje práci se (dotazy nad) soubory XML
LINQ to Objects (1) • Definován ve jmenném prostoru System.Linq • Slouží k dotazování nad daty, která jsou v ope-rační paměti (poli, třídami implementujícími rozhraní IEnumerable<T>) • Dotazovací engine je spuštěn spolu s programem a umožňuje lokální dotazování • Odpadává nutnost vytváření vlastních algoritmů pro vyhledávání v kolekcích • Dotazování není dynamické: • jakmile se jeden dotaz vyhodnotí a vrátí výslednou množinu, tak se do něj již nepromítají změny v pů-vodních datech
LINQ to Objects (2) • Pro zápis dotazů LINQ je možné použít např. následující operátory (klíčová slova): • from: • první klíčové slovo dotazu • slouží ke specifikaci datového zdroje, nad kterým je prováděn dotaz • where (Where): • umožňuje definovat podmínku (restrikci) pro výsledek • jestliže podmínka vrátí hodnotu true, tak je prvek zahrnut do výsledku • select (Select): • produkuje výsledky dotazu • používá se k implementaci projekce, kde jsou pouze něk-teré datové složky objektu použity ve výsledku • uvádí se vždy na konci dotazu
LINQ to Objects (3) • group (GroupBy): • umožňuje seskupování prvků ve výsledku podle určitého klíče • k použití tohoto slova se váže také použití klíčového slo-va by • into: • používáno v kombinaci s klíčovým slovem group, join nebo select k uložení výsledku a další možné práci s tímto výsledkem • orderby (OrderBy, OrderByDescending): • slouží k řazení prvků ve výsledku podle definovaných kritérií • pro sestupné řazení je možné jej použít s klíčovým slovem descending
LINQ to Objects (4) • join (Join, GroupJoin): • používá se k propojení prvků z různých datových zdrojů na základě definované podmínky ekvivalence • v kombinaci s tímto slovem se používají nová slova equals a on • let: • slouží k definici lokální proměnné v rámci dotazu • do této proměnné může být přiřazena sekvence elementů, nebo jednoduchá hodnota • Jmenný prostor System.Linq definuje ještě další rozšiřující metody, které lze v souvislosti s kolekcemi (poli) používat, např.: • First, Last: • výběr prvního nebo posledního prvku
LINQ to Objects (5) • FirstOrDefault , LastOrDefault: • vrací první, resp. poslední prvek • výchozí hodnotu daného datového typu v případě, že dotaz vrátil prázdný výsledek • ElementAt: • vrací prvek podle zadaného indexu • Count: • vrací počet prvků • Union, Intersect, Except: • provádí množinové operace (sjednocení, průnik a rozdíl) • Min, Max: • vrací minimální, resp. maximální hodnotu • Sum, Average: • vypočítá součet, resp. průměr prvků
LINQ to Objects (6) • Reverse: • obrátí pořadí prvků v kolekci (poli) • Concat: • spojí dvě sekvence (pole, kolekce) dohromady • OfType: • výběr pouze těch prvků, které jsou specifikovaného typu • Take: • vybere prvních n prvků • Skip: • vybere všechny prvky počínaje (n+1). prvkem • TakeWhile: • Vybíráprvkydokud není splněna určitá podmínka • SkipWhile: • přeskakuje prvky, dokud není splněna určitá podmínka
LINQ to Objects (7) • Obecný tvar jednoduchého dotazu LINQ:from [typ] proměnná indatový_zdroj [where] podmínka_restrikce [orderby] klíč_řazení [descending] selectvýraz_projekce; • Příklad:int[] numbers = {1,2,3,4,5};var result = from n in numberswhere n < 4orderby n descendingselect n; vybere z pole numbers všechna čísla menší než 4 a provede jejich sestupné seřazení
LINQ to Objects (8) • Předcházející dotaz může být také zapsán s vy-užitím rozšiřujících metod a lambda výrazů:int[] numbers = {1,2,3,4,5};var result = numbers.Where(n => n < 4). OrderByDescending(n => n); • Dotazy LINQ jsou prováděny s tzv. odloženým spuštěním (deferred execution): • dotaz je spuštěn až ve chvíli, kdy je k němu přistou-peno • samotné uložení dotazu do proměnné jeho spuštění nevyvolá
LINQ to Objects (9) • Příklad:List<int> numbers = new List<int>(){1,2,3,4,5}; varresult = fromninnumberswheren > 3selectn; numbers.Add(6); foreach(int i inresult) Console.Write("{0} ", i); • Uvedený program, vypíšehodnoty 4 5 6