TOC

This article has been localized into Czech by the community.

LINQ:

Úvod

LINQ, což je zkratka pro Language-Integrated Query (Dotaz integrovaný do jazyka), je technologie vestavěná do .NET frameworku, která vám umožní snadno dotazovat a manipulovat s daty napříč různými zdroji. Jinými slovy, můžete pracovat s daty stejným způsobem, bez ohledu na to, jestli je zdrojem jednoduchý seznam, slovník, XML soubor nebo tabulka databáze. LINQ je dostupné ve dvou syntaxích: Dotazovací a metodická syntaxe. Oba způsoby podrobně probereme v dalším článku, ale abych vás nadchl pro LINQ, dovolte mi ukázat vám rychlou ukázku, jak elegantně LINQ může dotazovat jednoduchý datový zdroj:

var names = new List<string>()  
{  
    "John Doe",  
    "Jane Doe",  
    "Jenna Doe",  
    "Joe Doe"  
};  

// Get the names which are 8 characters or less, using LINQ  
var shortNames = from name in names where name.Length <= 8 orderby name.Length select name;

foreach (var name in shortNames)  
    Console.WriteLine(name);

Pouze v jednom řádku, použitím dotazovací syntaxe LINQ, mohu požádat o všechna jména v seznamu, která mají 8 nebo méně znaků, a mít je seřazené podle délky! To je jen JEDEN řádek kódu a ukazuje jen malou část toho, na co je LINQ schopné! V dalších článcích proberu všechny úžasné možnosti, které získáte při použití LINQ, ale nejprve bychom měli trochu hovořit o tom, jak a kdy je dotaz LINQ proveden.

Odložené vykonání

Většina programátorů je zvyklá vidět kód, který se vykonává řádek po řádku, takže pro vás může být překvapením, že dotaz LINQ není vykonán hned, jakmile je zasažen řádek s částí dotazu. Místo toho je LINQ vykonáno, jakmile začnete data používat, např. když je procházíte iterací nebo voláte metodu jako ToList() nebo Count(). To také znamená, že můžete sestavit dotaz na několika řádcích, kde provádíte několik operací, ale data nejsou skutečně načtena, dokud je nepotřebujete. Dovolte mi ilustrovat to na rozšířené verzi našeho předchozího příkladu, kde přejdeme na metodickou syntaxi místo předchozí dotazovací syntaxe:

var names = new List<string>()
{
    "John Doe",
    "Jane Doe",
    "Jenna Doe",
    "Joe Doe"
};

// Get the names which are 8 characters or less, using LINQ
var shortNames = names.Where(name => name.Length <= 8);
// Order it by length
shortNames = shortNames.OrderBy(name => name.Length);
// Add a name to the original list
names.Add("Zoe Doe");

// Iterate over it - the query has not actually been executed yet!
// It will be as soon as we hit the foreach loop though!
foreach (var name in shortNames)
    Console.WriteLine(name);

Do kódu jsem přidal několik komentářů, takže by mělo být snadné mu porozumět. Všimněte si také, že jsem tam přidal trochu důkazu: Po provedení dotazu přidám jméno do původního seznamu. Nyní, pokud by dotaz již byl proveden, samozřejmě by se to do výsledku nedostalo, ale dostane, protože je přidáno po dotazu, ale PŘED tím, než data skutečně použijeme, což se děje ve smyčce foreach.

To není tak důležité, když dotazujeme seznam se 4 nebo 5 jmény, ale představte si, že bychom místo toho měli seznam s 10 miliony záznamů nebo možná vzdálenou databázi někde jinde. V tom případě je velmi důležité, abychom nevykonávali více dotazů, když můžeme vykonat jen jeden dotaz.

Shrnutí

LINQ umožňuje jednoduše a nativně dotazovat různé zdroje dat pomocí stejné syntaxe - buď pomocí syntaxe dotazu nebo syntaxe metody, kterou probereme v dalším článku.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!