Language Integrated Query
AutorMicrosoft Corporation
VývojářMicrosoft Corporation
Webhttps://docs.microsoft.com/en-us/dotnet/standard/using-linq

LINQ (anglicky Language Integrated Query) je integrovaný jazyk .NET Frameworku pro dotazování, který byl uveden spolu s jazyky C# 3.0Visual 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ázové rozhraní, 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.

Možnosti LINQ

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ě.

Použití LINQ

Výše jmenované jazyky byly rozšířeny o nová klíčová slova a další podpůrné jazykové konstrukce.

Klíčové pro pochopení jazyka LINQ a také následujících příkladů je zejména znalost těchto konstrukcí:

Ukázková použití

Výběr a třídění

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:

string[] slova = { "Ahoj", "Čau", "Dobrý den", "Na shledanou", "Dobrou noc" };
var kratkaSlova = from c in slova
    where c.Length < 5
    orderby c.Length
    select c;

foreach (string slovo in kratkaSlova)
{
    Console.WriteLine(slovo);
}

Rozbor kódu:

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.

Lambda výrazy

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í:

string[] slova = { "Ahoj", "Čau", "Dobrý den", "Nashledanou", "Dobrou noc" };
var kratkaSlova = slova
    .Where(c => c.Length < 5)
    .OrderBy(c => c.Length);
    
foreach (string slovo in kratkaSlova)
{
    Console.WriteLine(slovo);
}

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ýrazy, 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.

Metody LINQ

LINQ to Objects

Slouží pro dotazování nad daty, která již jsou v paměti, tj. nad poli a dalšími třídami implementující rozhraní IEnumerable<T>. 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.

LINQ to SQL

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.

LINQ to XML

Slouží pro práci s daty uložených v XML souborech, nepoužívá ani programování založené na DOM nebo SAX, ale jde novou cestou, kdy je k datům přistupováno plně objektově.

Externí odkazy

Česky

Anglicky