officeArt object PV178 – Lab06 Výsledek obrázku pro kahoot •LINQ •Odložené zpracování •LINQ a Entity Framework • Agenda Image result for linq C# LINQ •Language Integrated Query •Jednotný přístup k datům •Data pro LINQ mohou být v: - databázi - XML - kolekci … •Zjednodušení a zpřehlednění kódu •Soubor rozšiřujících metod •Dva ekvivalentní typy syntaxe (query a method) Image result for linq C# Query syntaxe var ints = new List{ 4, 5, 85, 67, 87, 98, 150, 170} var intsBiggerThan15 = from i in ints where i > 15 select i; •Připomíná SQL zápis •Dnes méně používaný •Méně přehledný (můj osobní názor) Method syntaxe var ints = new List{ 4, 5, 85, 67, 87, 98, 150, 170} •Více používaná •Kratší zápisy •Používá tečkovou notaci var intsBiggerThan15 = ints.Where(i => i > 15); LINQ - filozofie Image result for linq c# Odložené zpracování • • • •Dotazy LINQ jsou prováděny s odloženým spuštěním •Dotaz je spuštěn až když je k němu přistoupeno – optimalizace výkonu •Uložení dotazu do proměnné spuštění nevyvolá! •Pozor na výrazy, které nutí vyhodnotit dotaz okamžitě (ToList, ToArray …) • • Odložené zpracování – příklad • • • var ints = new List{ 4, 5, 85, 67, 87, 98, 150, 170}; IEnumerable result = ints.Where(i => i > 15); result.ToList() // Dotaz se spustí až teď !!! if (false) { result.ToList() // Dotaz se nespustí nikdy - optimalizace } IEnumerable a vyhodnocení dotazu 1 • var ints = new List{ 4, 5, 85, 67, 87, 98, 150, 170}; var result = ints.Where(i => i > 15) .Select(i => i + 10) .Select(i => i - 15) .ToList(); // čekání až se zpracují všechny prvky Select(i => i + 10) Where(i => i > 15) Select(i => i - 15) 4 5 85 result > IEnumerable a vyhodnocení dotazu 2 – takto NE! var ints = new List{ 4, 5, 85, 67, 87, 98, 150, 170}; var result = ints.Where(i => i > 15) .ToList() // čekání až se zpracují všechny prvky .Select(i => i + 10) .ToList() // čekání až se zpracují všechny prvky .Select(i => i - 15) .ToList(); // čekání až se zpracují všechny prvky Select(i => i + 10) Where(i => i > 15) Select(i => i - 15) 4 5 85 result •Pozor, zpomalení se projeví až u velké kolekce (např.: až v produkci) > IEnumerable a vyhodnocení dotazu 3 – takto NE! var ints = new List(100000){ 4, 5, 85, 67, 87, 98, 150, 170 ...}; // Takto NE! var result = ints.Where(i => i > 15) .ToList(); // Nutí k vyhodnocení var first = result.First(); •Pozor, zpomalení se projeví až u velké kolekce (např.: až v produkci) // Opraveno var result = ints.Where(i => i > 15) var first = result.First(); // Úplně nejlépe var first = ints.First(i => i > 15) LINQ poskytovatelé (providers) •Provádí překlad LINQ dotazu na pro konkrétní platformu •LINQ to Objects: - slouží k práci s libovolnou kolekcí, která implementuje rozhraní IEnumerable •LINQ to SQL: - mapuje příkazy LINQ na dotazy SQL a umožňuje práci s MS SQL Server •LINQ to DataSet: - používá technologii ADO.NET pro komunikaci s databázemi •LINQ to XML: - umožňuje práci se soubory XML LINQ to Objects • • •Definován v jmenném prostoru System.Linq •Pro kolekce implementující IEnumerable • Image result for LINQ to Objects Samostatná práce • • 1.Rebuild solution 2.Seznamte se s DataLoader projektem (načítá data, definuje typy apod.) 3.Nastavte si LINQ projekt jako Start Up Project 4.Pro získávání dat používejte statickou třídu DataContext 5.Hurá do LINQu (Task01 …) • Image result for individual work