Language Integrated Query (LINQ)Language Integrated Query (LINQ)

Language Integrated Query (LINQ) je název pro sadu technologií, v závislosti na integraci schopnosti příkazů jazyka přímo do jazyka C#.Language-Integrated Query (LINQ) is the name for a set of technologies based on the integration of query capabilities directly into the C# language. Tradičně dotazů na data jsou vyjádřené jako jednoduchý řetězce bez kontrolu typu v kompilaci čas nebo podporu technologie IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Kromě toho budete muset učit jazyk dotazu pro každý typ zdroje dat: SQL databáze, dokumenty XML, různé webové služby a tak dále.Furthermore, you have to learn a different query language for each type of data source: SQL databases, XML documents, various Web services, and so on. S dotazy LINQ dotaz, který je typů prvotřídní jazykové konstrukce, stejně jako třídy, metody a události.With LINQ, a query is a first-class language construct, just like classes, methods, events.

Pro vývojáře, který zapíše dotazy je většina viditelnou část "language-integrated" LINQ výrazu dotazu.For a developer who writes queries, the most visible "language-integrated" part of LINQ is the query expression. Výrazy dotazů jsou napsané v deklarativní syntaxe dotazu.Query expressions are written in a declarative query syntax. Pomocí syntaxe dotazu, můžete provádět filtrování, řazení a seskupení operací u zdrojů dat s minimálním kódu.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Použijte stejné vzorce výrazu základního dotazu pro dotazování a transformaci dat v SQL Database, ADO .NET datové sady, dokumentů XML a datových proudů a kolekcí .NET.You use the same basic query expression patterns to query and transform data in SQL databases, ADO .NET Datasets, XML documents and streams, and .NET collections.

Následující příklad znázorňuje operaci úplného dotazu.The following example shows the complete query operation. Dokončení operace zahrnuje vytvoření zdroje dat, definující výraz dotazu a zpracování dotazu v foreach příkazu.The complete operation includes creating a data source, defining the query expression, and executing the query in a foreach statement.

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

Přehled výrazu dotazuQuery expression overview

  • Výrazy dotazu lze použít k dotazování a transformaci dat z libovolného zdroje data povolenými LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Pomocí jediného dotazu můžete například načtení dat z SQL database a vytvořit datový proud XML jako výstup.For example, a single query can retrieve data from a SQL database, and produce an XML stream as output.

  • Výrazy dotazu představují snadný na hlavní server, protože používají řadu známých konstrukcí jazyka C#.Query expressions are easy to master because they use many familiar C# language constructs.

  • Proměnné ve výrazu dotazu jsou všechny silného typu, ale v mnoha případech není nutné explicitně zadat typ, protože kompilátor může odvodit ho.The variables in a query expression are all strongly typed, although in many cases you do not have to provide the type explicitly because the compiler can infer it. Další informace najdete v tématu vztahy typů v LINQ dotaz operace.For more information, see Type relationships in LINQ query operations.

  • Dotaz není spuštěn, dokud neprovedete iteraci v proměnné dotazu, například v foreach příkazu.A query is not executed until you iterate over the query variable, for example, in a foreach statement. Další informace najdete v tématu Úvod do dotazů LINQ.For more information, see Introduction to LINQ queries.

  • V době kompilace jsou výrazy dotazu převedeny na volání metody standardního operátoru dotazu podle pravidel specifikace jazyka C#.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Jakýkoli dotaz, který lze vyjádřit pomocí syntaxe dotazu lze také vyjádřit pomocí syntaxe metody.Any query that can be expressed by using query syntax can also be expressed by using method syntax. Ale ve většině případů je syntaxe dotazu čitelný a výstižně.However, in most cases query syntax is more readable and concise. Další informace najdete v tématu specifikace jazyka C# a přehled standardních operátorů dotazu.For more information, see C# language specification and Standard query operators overview.

  • Zpravidla při psaní dotazů LINQ, doporučujeme použít syntaxi dotazů, kdykoli je to možné a syntaxe využívající metody kdykoli je to zapotřebí.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. Neexistuje žádné sémantické nebo výkonu rozdíl mezi dvě různými formami jiný.There is no semantic or performance difference between the two different forms. Výrazy dotazů jsou často čitelnější než ekvivalentní výrazy, které jsou napsané v syntaxe metody.Query expressions are often more readable than equivalent expressions written in method syntax.

  • Některé operace, například dotazování Count nebo Max, mít žádná klauzule výrazu dotazu odpovídá a proto musí být vyjádřena jako volání metody.Some query operations, such as Count or Max, have no equivalent query expression clause and must therefore be expressed as a method call. Syntaxe využívající metody můžete kombinovat pomocí syntaxe dotazu různými způsoby.Method syntax can be combined with query syntax in various ways. Další informace najdete v tématu syntaxe využívající dotazy a syntaxe využívající metody v LINQ.For more information, see Query syntax and method syntax in LINQ.

  • Výrazy dotazu může být zkompilován na stromy výrazů nebo na delegáty, v závislosti na typu použitého dotazu.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. IEnumerable<T> dotazy jsou kompilovány do delegátů.IEnumerable<T> queries are compiled to delegates. IQueryable a IQueryable<T> dotazy se kompilují na stromy výrazů.IQueryable and IQueryable<T> queries are compiled to expression trees. Další informace najdete v tématu stromů výrazů.For more information, see Expression trees.

Další krokyNext steps

Další informace o dotazech technologie LINQ, začněte se seznamovat s některé základní pojmy v základy výrazů dotazů, a pak si můžete přečíst dokumentaci k technologie LINQ, který vás zajímá:To learn more details about LINQ, start by becoming familiar with some basic concepts in Query expression basics, and then read the documentation for the LINQ technology in which you are interested:

Získání hlubší pochopení LINQ obecně získáte LINQ v JAZYKU C#.To gain a deeper understanding of LINQ in general, see LINQ in C#.

Pokud chcete začít pracovat s dotazy LINQ v C#, najdete v kurzu práce s jazykem LINQ.To start working with LINQ in C#, see the tutorial Working with LINQ.