LINQ (Language integrated query) Prezentace na 3IT353 Zpracovali: Martin Latiak, Michal Pěnka, Petr Spurný
Struktura prezentace Co je to LINQ Obecné informace Proces dotazování Představení Standard Query Operator API Praktické příklady Databáze Amazon Podpora, využitelnost - shrnutí
Co je to LINQ Obecné informace Komponenta Microsoft.NET frameworku (součástí.net FW od verze 3.5) Má schopnost nativního dotazování pomocí jazyka podobnému SQL Definuje sadu operátorů (některé jsou novými klíčovými slovy) pro dotazování nad: Polemi (Arrays) Výčtovými třídami (Enumerable classes) XML Relačními databázemi Datovými zdroji třetích stran
Co je to LINQ Proces dotazování LINQ je programátorovi přístupný přes Standard Query Operator API (SQO API) Data nad kterými se dotazujeme by měla být reprezentována jako objekty U zdrojů, které nemají data v objektech nutné mapování Výsledek LINQ dotazu vždy jako sada objektů v paměti (možné převést na pole apod.)
Představení Standard Query Operator API Standardní operátory Select/SelectMany Where Join/GroupJoin Take/TakeWhile, Skip/SkipWhile OfType OrderBy, GroupBy Count, Sum/Min/Max/Average Konverzní operátory toarray, tolist, asenumerable atd.
Praktické příklady Jednoduché příklady na SQO API Pole Napojení na databázi LINQ to SQL Zdroje třetích stran LINQ to Amazon
Trocha cukříku syntactic sugar Syntactic sugar je rozšířením syntaxe jazyka bez přidané funkcionality usnadnění (oslazení ) programování S příchodem LINQu je obecně definováno několik rozšíření jazyků použitelných pod.net frameworkem: Anonymní typy Lambda výrazy Rozšiřující metody Syntaxe dotazů LINQ
Trocha cukříku syntactic sugar 2
Příklady Videa demonstrující příklady jsou ke stažení na adrese: http://files.spurny.it/linq.zip
Příklad 1: Pole
Příklad 2: Seznam (list) objektů
Příklad 3: Databáze Příklad na lokální databázi (*.sdf) Nutné namapování databáze do objektů utilita SqlMetal Možné generovat: Přímo zdrojový kód Mapovací XML soubor (pro možnost úprav) a poté zdrojový kód Nebo použití LINQ to SQL Designer (součástí MS Visual Studia)
Příklad 3: Databáze 2 LINQ to SQL Designer
Příklad 3: Databáze - SELECT
Příklad 3: Databáze INSERT, UPDATE
Příklad 4: LINQ to? Prakticky neomezená variabilita typu dat nad kterými se lze dotazovat LINQem Vznikají produkty třetích stran LINQ to Flickr LINQ to XSD, XML (M$) LINQ to Amazon
Praktické příklady Amazon (1) var query = from book in new Amazon.BookSearch() where book.title.contains("ajax") && (book.publisher == "Manning") && (book.price <= 25) && (book.condition == BookCondition.New) select book; var sequence = query.tosequence(); var groups = from book in query.tosequence() group book by book.year into years orderby years.key descending select new { Year = years.key, Books = from book in years select new { book.title, book.authors } };
Praktické příklady Amazon (2) foreach (var group in groups) { Console.WriteLine("Published in "+group.year); foreach (var book in group.books) { Console.Write(" "); ObjectDumper.Write(book); } Console.WriteLine(); } Published in 2006 Title=Ruby for Rails : Ruby Techniques for Rails Developers Authors=... Title=Wxpython in Action Authors=... Published in 2005 Title=Ajax in Action Authors=... Title=Spring in Action (In Action series) Authors=...
Vedúca myšlienka LINQ Zjednodušiť prístup k dátam Jednotný prístup bez ohľadu na zdroj dát SQL dotazy -> súčasť kódu SQL dotazovanie bez ohľadu na zdroj dát "It's my hope that in five to 10 years, programming languages simply will have queries as a concept built in, because that's just a must." - Anders Hejlsberg, achitekt LINQ
Použitie Hlavne v Data Access vrstve dáta -> objekty...ale nielen tam Front end Dotazy na datasety získané z back endu Dotazy na XML súbory Back end Dotazy na DB Množstvo providerov LINQ to Google Desktop, LINQ to Flickr, LINQ to Geospatial Data...
Záver Výkon Budúcnosť určia vývojári Optimistický pohľad Implementácie v iných prostrediach PHP LINQ Quaere (Java) JSLINQ (JavaScript)
Zdroje Wikipedia.org http://en.wikipedia.org/wiki/language_integrated_query Microsoft http://msdn2.microsoft.com/cs-cz/library/bb308959(enus).aspx Vyvojar.cz http://www.vyvojar.cz/articles/484-linq.aspx Fabrice's weblog http://weblogs.asp.net/fmarguerie Redmond Developer News http://reddevnews.com/features/article.aspx?editorialsid=707 LINQ performance http://blogs.msdn.com/ricom/archive/2007/06/22/dlinqlinq-to-sql-performance-part-1.aspx