Array ( [0] => 15522520 [id] => 15522520 [1] => cswiki [site] => cswiki [2] => LINQ [uri] => LINQ [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => {{Infobox - programovací jazyk [1] => | název = Language Integrated Query [2] => | autor = [[Microsoft|Microsoft Corporation]] [3] => | vývojář = [[Microsoft|Microsoft Corporation]] [4] => | web = https://docs.microsoft.com/en-us/dotnet/standard/using-linq [5] => }} [6] => '''LINQ''' ({{Vjazyce2|en|'''Language Integrated Query'''}}) je integrovaný jazyk [[.NET|.NET Frameworku]] pro dotazování, který byl uveden spolu s jazyky [[C Sharp#C.23 3.0|C# 3.0]] a [[Visual Basic .NET|Visual Basic 9]], pod hlavičkou .NET Frameworku 3.5. Přínosem LINQ je představení jednotné syntaxe pro přístup k datům – bez ohledu na jejich zdroj, kterým může být [[Databáze|databázové rozhraní]], [[Extensible Markup Language|XML soubor]], nebo takový objekt v paměti, jenž není prostředníkem přístupu k žádné entitě vně programu. LINQ usnadňuje transformaci, třídění a propojování dat a vyhledávání v nich. [7] => [8] => == Možnosti LINQ == [9] => LINQ je navržen jako poměrně obecný nástroj, takže je možné v něm manipulovat s různými daty. LINQ to Objects umožňuje dotazování nad normálními objekty (respektive jejich kolekcemi), LINQ to SQL přináší nový způsob pro práci s databázemi a LINQ to XML umožňuje pracovat s XML soubory. Na internetu jsou dostupné i další implementace LINQu, jako je například [[LINQ to Amazon]], který slouží pro vyhledávání knih v tomto internetovém obchodě. [10] => [11] => == Použití LINQ == [12] => Výše jmenované jazyky byly rozšířeny o nová klíčová slova a další podpůrné jazykové konstrukce. [13] => [14] => Klíčové pro pochopení jazyka LINQ a také následujících příkladů je zejména znalost těchto konstrukcí: [15] => * [[Lambda výrazy]] jsou jednodušší metodou zápisu [[Anonymní metoda|anonymních metod]]. [16] => * Inicializátory objektů a kolekcí. [17] => * Rozšiřující metody. [18] => * [[Anonymní třída|Anonymní třídy]] umožňující např. rychlé vytvoření objektů přenášejících informace vyžádané z databáze přes LINQ. [19] => * Klíčové slovo var, nutná to podmínka pro využití anonymních tříd. [20] => * [[Výrazový strom|Výrazové stromy]] (expression trees) umožňující za jistých podmínek [[Překladač|kompilátoru]] místo vyhodnocení výrazu vytvoření jeho objektové reprezentace. [21] => [22] => == Ukázková použití == [23] => [24] => === Výběr a třídění === [25] => Výběr všech řetězců, jejichž délka je menší než 5 znaků, spolu se setříděním těchto řetězců dle délky demonstruje následující ukázka: [26] => [27] => [28] => string[] slova = { "Ahoj", "Čau", "Dobrý den", "Na shledanou", "Dobrou noc" }; [29] => var kratkaSlova = from c in slova [30] => where c.Length < 5 [31] => orderby c.Length [32] => select c; [33] => [34] => foreach (string slovo in kratkaSlova) [35] => { [36] => Console.WriteLine(slovo); [37] => } [38] => [39] => [40] => Rozbor kódu: [41] => * 1. řádek – jako objekt slova deklaruje jednorozměrné pole řetězců a definuje jej pěti řetězci, z nichž každý má jinou délku. [42] => * 2. řádek – deklaruje objekt kratkaSlova, jako (hrubý, rámcový) zdroj jeho obsahu určuje objekt slova a jako lokální proměnnou zastupující jednotlivé položky v dalším kódu příkazu stanovuje identifikátor c; klíčové slovo var nese informaci, že typ deklarované proměnné (v tomto případě reference kratkaSlova) má být odvozen z kontextu (jedná se o modernější alternativu konstrukce IOrderedEnumerable kratkaSlova). [43] => * 3. řádek – z množiny vylučuje nevyhovující prvky; žádané jsou pouze řetězce kratší než zadaná celočíselná konstanta (5). [44] => * 4. řádek – celý seznam zadává setřídit, a to vzestupně, dle délky jednotlivých zdrojových řetězců. [45] => * 5. řádek – definuje, jakým způsobem se ze vstupního řetězce „vyrobí“ výstupní; text by bylo možné např. převést na velká písmena nebo na jeho konec připojit tečku, použito je ale jednotkové [[Zobrazení (matematika)|zobrazení]] (možnost transformace není využita). [46] => * 7. až 10. řádek – pole kratkaSlova přikazuje vypsat na standardní výstup. [47] => [48] => Poznámka: Určení typu objektu kratkaSlova, zmíněné v popisu 2. řádku kódu, proběhne v rámci kompilace, tedy před spuštěním programu. [49] => [50] => === Lambda výrazy === [51] => LINQ je možné používat také ve stručnější formě – pomocí rozšiřujících metod a [[lambda výraz]]ů. Následující kód, zkonstruovaný v tomto duchu, provádí totéž, co kód předchozí: [52] => [53] => [54] => string[] slova = { "Ahoj", "Čau", "Dobrý den", "Nashledanou", "Dobrou noc" }; [55] => var kratkaSlova = slova [56] => .Where(c => c.Length < 5) [57] => .OrderBy(c => c.Length); [58] => [59] => foreach (string slovo in kratkaSlova) [60] => { [61] => Console.WriteLine(slovo); [62] => } [63] => [64] => [65] => Metody Where a OrderBy, jež v kontextu LINQ lze s úspěchem považovat za klíčové, je na poli řetězců možné volat proto, že tyto jsou definovány pro všechny objekty implementující rozhraní IEnumerable, mezi něž pole řetězců patří. Zmíněné [[lambda výraz]]y, jejichž poznávacím znamením je operátor =>, uplatňuje jak metoda Where, tak metoda OrderBy; jejich mechanismus funguje tak, že za ''c'' se postupně dosadí každý jednotlivý řetězec z pole slova. [66] => [67] => == Metody LINQ == [68] => * Select – výběr hodnoty kterou chceme použít, ekvivalent Map v jiných jazycích [69] => ** Cast – specializace Select pro přetypování jednotlivých prvků v kolekci [70] => * Where – omezení výběru prvků podle specifikované podmínky, ekvivalent Filter v jiných jazycích, kromě obecného Where jsou v LINQ i specializované metody [71] => ** OfType – výběr prvků určitého typu [72] => ** Skip – přeskočení zvoleného množství prvků a vrácení všech ostatních [73] => ** SkipWhile – přeskočení všech prvků, pro které platí zadaná podmínka, vrácení všech následujících prvků bez ohledu zda zadaná podmínka platí či ne [74] => ** Take – výběr maximálně zvoleného množství prvků [75] => ** TakeWhile – výběr prvků, pro které platí zadaná podmínka, přeskočení všech prvků po prvním, pro který zadaná podmínka neplatí bez ohledu zda zadaná podmínka platí či ne [76] => * Aggregate – spojení prvků v kolekci do jediného prvku, ekvivalent Reduce v jiných jazycích, kromě obecného Aggregate jsou v LINQ i specializované metody [77] => ** Sum, Min, Max, Average – vrací součet, minimální, maximální či průměrnou hodnotu z dané kolekce [78] => ** Count, LongCount – vrací počet prvků v kolekci [79] => ** First(OrDefault), Last(OrDefault), Single(OrDefault) – výběr prvního, posledního nebo jediného prvku z kolekce [80] => ** ElementAt – výběr prvku na zadaném indexu [81] => ** SelectMany – výběr kolekcí z jednotlivých prvků a jejich spojení do jediné výsledné kolekce [82] => ** Any – zjistí zda alespoň jeden prvek v kolekci vyhovuje zadané podmínce [83] => ** All – zjistí, zda všechny prvky v kolekci vyhovují zadané podmínce [84] => ** Contains – zjistí, zda kolekce obsahuje zadaný prvek [85] => * Metody vytvářející kolekce [86] => ** Empty – vytvoří prázdnou kolekci [87] => ** Repeat – vytvoří kolekci, která zopakuje zadaný prvek v zadaném počtu případů [88] => ** Range – vytvoří kolekci celých čísel inkrementovanou po jedné od zadaného minima a obsahující zadaný počet prvků [89] => * Ostatní metody měnící vstupní sekvenci na výstupní sekvenci [90] => ** Join – spojení více kolekcí, výsledný prvek se skládá z ekvivalentních prvků obou kolekcí [91] => *** Zip – Specializace Join, prvky jsou považovány za ekvivalentní pokud mají stejnou pozici ve zdrojových kolekcích [92] => ** GroupBy – rozdělení dat do více skupin podle určitého klíče [93] => ** OrderBy(Descending) – specifikace třídění, umožňuje výběr elementu podle kterého se má třídit [94] => *** Thenby(Descending) – specifikace následujícího třídění [95] => ** Union, Intersect, Except – definice množinových operací sjednocení, průnik a rozdíl [96] => ** Reverse – otočí pořadí prvků v kolekci [97] => ** Concat – spojí dvě kolekce dohromady [98] => ** Append – přidání prvku na začátek kolekce [99] => ** Prepend – přidání prvku na konec kolekce [100] => * Metody převádějící kolekci do paměti (provádějící SQL dotaz nebo vyhodnocující LINQ dotaz) [101] => ** ToArray – převede kolekci na pole [102] => ** ToList – převede kolekci na seznam [103] => ** ToHashSet – převede kolekci na set [104] => ** ToDictionary – převede kolekci na slovník [105] => ** ToLookup – převede kolekci na ekvivalent slovníku, jehož hodnoty jsou kolekce [106] => [107] => == LINQ to Objects == [108] => Slouží pro dotazování nad daty, která již jsou v paměti, tj. nad poli a dalšími třídami implementující rozhraní IEnumerable. Dotazovací engine je spuštěn spolu s programem a umožňuje lokální dotazování. Tento způsob dotazování není dynamický, takže 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. [109] => [110] => == LINQ to SQL == [111] => Umožňuje dotazování nad databázemi využívající rozhraní MS SQL. Jelikož tyto databáze mají svůj vlastní dotazovací jazyk SQL, není zde přímo nasazen dotazovací engine LINQ, ale místo toho se příkazy LINQu mapují na odpovídající příkazy SQL. Jelikož jsou ale data v těchto databázích uložena jako relační, musí být ještě nasazen tzv. mapper těchto dat na objektová data která používá LINQ. Výhodou použití LINQu místo klasického přístupu je zejména objektový pohled na data. [112] => [113] => == LINQ to XML == [114] => Slouží pro práci s daty uložených v XML souborech, nepoužívá ani programování založené na [[Document Object Model|DOM]] nebo [[Simple API for XML|SAX]], ale jde novou cestou, kdy je k datům přistupováno plně objektově. [115] => [116] => == Externí odkazy == [117] => [118] => === Česky === [119] => * [http://www.vyvojar.cz/Articles/563-uvod-do-linq.aspx Vývojář: Úvod do LINQ] - již nefunkční web ! [120] => * [https://web.archive.org/web/20080401090015/http://wintax.ms.mff.cuni.cz/vecery/linq.aspx Programátorské večery: C# 3.0 a projekt LINQ] (video) – neplatný odkaz ! [121] => [122] => === Anglicky === [123] => * [https://web.archive.org/web/20061007124738/http://msdn.microsoft.com/netframework/future/linq Official Microsoft LINQ Project] – neplatný odkaz ! [124] => * [http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx 101 Příklady v C#] [125] => * [http://msdn2.microsoft.com/en-us/vbasic/bb688088.aspx 101 Příklady ve VB.NET] [126] => * [http://msdn2.microsoft.com/en-us/library/bb387098.aspx Dokumentace k LINQ to XML] [127] => * [https://web.archive.org/web/20071111055117/http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=123&SiteID=1 Fórum Microsoftu] – neplatný odkaz ! [128] => * [https://web.archive.org/web/20071017152214/http://www.netfxguide.com/guide/linq.aspx Stránka LINQ na NetFXGuide.com] – neplatný odkaz ! [129] => * [https://web.archive.org/web/20080425224159/http://www.hookedonlinq.com/ LINQ wiki] – neplatný odkaz ! [130] => * [http://blogs.msdn.com/charlie/archive/2008/02/17/linq-books.aspx Knihy o LINQ] [131] => * [http://www.codeplex.com/clinq Continuous LINQ] [132] => * [http://www.codeplex.com/LINQtoSharePoint LINQ To Sharepoint] [133] => * [http://www.codeplex.com/LINQtoAD LINQ To Active Directory] [134] => * [http://reddevnews.com/features/article.aspx?editorialsid=707 Looking to LINQ – Will Microsoft's Language Integrated Query transform programmatic data access?] [135] => [136] => {{Programovací jazyky}} [137] => {{Autoritní data}} [138] => [139] => [[Kategorie:Dotazovací jazyky]] [] => )
good wiki

LINQ

LINQ je integrovaný jazyk . NET Frameworku pro dotazování, který byl uveden spolu s jazyky C# 3.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'lambda výraz','Microsoft','Kategorie:Dotazovací jazyky','Simple API for XML','Document Object Model','Zobrazení (matematika)','Překladač','Výrazový strom','Anonymní třída','.NET','Lambda výrazy','LINQ to Amazon'