LINQ (Language Integrated Query) (C#)

Language-Integrated Query (LINQ) je název sady technologií založených na integraci možností dotazů přímo do jazyka C#. Tradičně se dotazy na data vyjadřují jako jednoduché řetězce bez kontroly typu v době kompilace nebo v podpoře 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 a tak dále. Pomocí LINQ je dotazem konstrukce jazyka první třídy, stejně jako třídy, metody a události. Zapisujete dotazy na kolekce objektů se silnými typy pomocí klíčových slov jazyka a známých operátorů. rodina technologie LINQ nabízí konzistentní možnosti dotazování pro objekty (LINQ to Objects), relační databáze (LINQ to SQL) a XML (LINQ to XML).

Pro vývojáře, který zapisuje dotazy, je nejpravděpodobnější "jazykově integrovaná" část LINQ výraz dotazu. Výrazy dotazů jsou zapsány v deklarativní syntaxi dotazu. Pomocí syntaxe dotazů můžete provádět filtrování, řazení a seskupování operací na zdrojích dat s minimálním kódem. k dotazování a transformaci dat v SQL databázích, ADO.NET datových sadách, dokumentech XML a datových proudech a kolekcích .net můžete použít stejné základní vzory výrazů dotazů.

dotazy LINQ můžete psát v jazyce C# pro SQL Server databází, dokumentů XML, ADO.NET datových sad a všech kolekcí objektů, které podporují IEnumerable nebo obecné IEnumerable<T> rozhraní. Podporu LINQ poskytují i třetí strany pro mnoho webových služeb a dalších implementací databáze.

Následující příklad ukazuje operaci dokončení dotazu. Operace Complete zahrnuje vytvoření zdroje dat, definování výrazu dotazu a spuštění dotazu v foreach příkazu.

class LINQQueryExpressions
{
    static void Main()
    {

        // Specify the data source.
        int[] scores = new int[] { 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

následující ilustrace z Visual Studio ukazuje částečně dokončený dotaz LINQ na databázi SQL Server v jazyce C# i v Visual Basic s kontrolou úplného typu a podporou technologie IntelliSense:

Diagram, který zobrazuje dotaz LINQ pomocí technologie IntelliSense.

Přehled výrazu dotazu

  • Výrazy dotazů lze použít k dotazování a transformaci dat z libovolného zdroje dat s podporou jazyka LINQ. jeden dotaz může například načíst data z databáze SQL a vytvořit datový proud XML jako výstup.
  • Výrazy dotazů je možné snadno uchopit, protože používají mnoho známých konstrukcí jazyka C#.
  • Proměnné ve výrazu dotazu jsou všechny silně typované, i když v mnoha případech nemusíte explicitně zadat typ, protože ho kompilátor může odvodit. Další informace najdete v tématu vztahy typů v operacích dotazu LINQ.
  • Dotaz není proveden, dokud neprovedete iteraci nad 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 dotazu převedeny na standardní volání metody 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ější a Stručná. Další informace najdete v tématu Přehled jazyka C# a standardní operátory dotazu.
  • Jako pravidlo při psaní dotazů LINQ doporučujeme použít syntaxi dotazu, kdykoli je to možné, a syntaxi metody kdykoli je to nezbytné. Mezi dvěma různými formuláři není žádný sémantický nebo výkonový rozdíl. Výrazy dotazů jsou často čitelnější než ekvivalentní výrazy napsané v syntaxi metody.
  • Některé operace dotazu, například Count nebo Max , nemají žádnou ekvivalentní klauzuli výrazu dotazu a musí být proto vyjádřeny jako volání metody. Syntaxi metody lze kombinovat se syntaxí dotazu různými způsoby. Další informace naleznete v tématu syntaxe dotazu a syntaxe metody v jazyce LINQ.
  • Výrazy dotazů lze zkompilovat do stromů výrazů nebo delegátů v závislosti na typu, na který je dotaz použit. IEnumerable<T> dotazy jsou kompilovány pro delegáty. IQueryable a IQueryable<T> dotazy jsou kompilovány do stromů výrazů. Další informace najdete v tématu stromy výrazů.

Další kroky

Pokud chcete získat další informace o LINQ, začněte tím, že se seznámíte s některými základními koncepty v základech dotazů na dotazya pak si přečtěte dokumentaci pro technologii LINQ, ve které máte zájem:

Chcete-li získat hlubší porozumění LINQ obecně, přečtěte si téma LINQ v jazyce C#.

Chcete-li začít pracovat s LINQ v jazyce C#, přečtěte si kurz práce s LINQ.