Sdílet prostřednictvím


LINQ (Language Integrated Query)

Language-Integrated Query (LINQ) je název pro sadu technologií na základě integrace možností dotazů přímo do jazyka C#. Dotazy na data se tradičně vyjadřují jako jednoduché řetězce bez kontroly typů v době kompilace nebo podpory Technologie IntelliSense. Kromě toho se musíte naučit jiný dotazovací jazyk pro každý typ zdroje dat: SQL databáze, dokumenty XML, různé webové služby atd. V jazyce LINQ je dotaz jazykovou konstrukcí první třídy, stejně jako třídy, metody a události.

Pro vývojáře, který píše dotazy, je nejviditelnější "jazykově integrovaná" část LINQ výraz dotazu. Výrazy dotazů jsou napsány v syntaxi deklarativního dotazu. Pomocí syntaxe dotazu můžete provádět operace filtrování, řazení a seskupování zdrojů dat s minimem kódu. Stejné základní vzory výrazů dotazů se používají k dotazování a transformaci dat v databázích SQL, datových sadách ADO .NET, dokumentech a datových proudech XML a kolekcích .NET.

Následující příklad ukazuje úplnou operaci dotazu. Úplná operace zahrnuje vytvoření zdroje dat, definování výrazu dotazu a spuštění dotazu v foreach příkazu .

// Specify the data source.
int[] scores = { 97, 92, 81, 60 };

// Define the query expression.
IEnumerable<int> scoreQuery =
    from score in scores
    where score > 80
    select score;

// Execute the query.
foreach (int i in scoreQuery)
{
    Console.Write(i + " ");
}

// Output: 97 92 81

Přehled výrazů dotazů

  • Výrazy dotazů lze použít k dotazování a transformaci dat z libovolného zdroje dat s podporou LINQ. Například jeden dotaz může načíst data z SQL databáze a vytvořit datový proud XML jako výstup.

  • Výrazy dotazů lze snadno pochopit, protože používají mnoho známých konstruktorů jazyka C#.

  • Proměnné ve výrazu dotazu jsou všechny silného typu, i když v mnoha případech není nutné explicitně zadat typ, protože kompilátor ho může odvodit. Další informace najdete v tématu Relace typů v operacích dotazů LINQ.

  • Dotaz se neprovádí, dokud neprovádíte iteraci přes proměnnou dotazu, například v foreach příkazu . Další informace najdete v tématu Úvod do dotazů LINQ.

  • V době kompilace jsou výrazy dotazů převedeny na volání metody standardního operátoru dotazu podle pravidel stanovených ve specifikaci jazyka C#. Jakýkoli dotaz, který lze vyjádřit pomocí syntaxe dotazu, lze také vyjádřit pomocí syntaxe metody. Ve většině případů je ale syntaxe dotazů čitelná a stručnější. Další informace najdete v tématu Specifikace jazyka C# aPřehled standardních operátorů dotazů.

  • Při psaní dotazů LINQ doporučujeme vždy, když je to možné, používat syntaxi dotazů a syntaxi metod, kdykoli je to potřeba. Mezi těmito dvěma různými formuláři není žádný sémantický rozdíl nebo rozdíl ve výkonu. Výrazy dotazů jsou často lépe čitelné než ekvivalentní výrazy napsané v syntaxi metody.

  • Některé operace dotazů, například Count nebo Max, nemají žádnou ekvivalentní klauzuli výrazu dotazu a proto musí být vyjádřeny jako volání metody. Syntaxi metody lze kombinovat se syntaxí dotazu různými způsoby. Další informace najdete v tématu Syntaxe dotazů a syntaxe metod v jazyce LINQ.

  • Výrazy dotazů lze zkompilovat do stromů výrazů nebo delegátů v závislosti na typu, na který se dotaz používá. IEnumerable<T> Dotazy se kompilují do delegátů. IQueryable Dotazy IQueryable<T> a se kompilují do stromů výrazů. Další informace najdete v tématu Stromy výrazů.

Další kroky

Pokud chcete získat další podrobnosti o jazyce LINQ, začněte tím, že se seznámíte s některými základními koncepty v tématu Základy výrazů dotazů a pak si přečtěte dokumentaci pro technologii LINQ, která vás zajímá:

Pokud chcete získat hlubší porozumění jazyku LINQ obecně, podívejte se na linq v jazyce C#.

Pokud chcete začít pracovat s JAZYKem LINQ v jazyce C#, podívejte se na kurz Práce s LINQ.