LINQ (Consulta Integrada à Linguagem)Language Integrated Query (LINQ)

O LINQ (consulta integrada à linguagem) é o nome de um conjunto de tecnologias com base na integração de recursos de consulta diretamente na linguagem 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. Tradicionalmente, consultas em dados são expressas como cadeias de caracteres simples sem verificação de tipo no tempo de compilação ou no suporte a IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Além disso, você precisará aprender uma linguagem de consulta diferente para cada tipo de fonte de dados: Bancos de dados SQL, documentos XML, vários serviços Web e assim por diante.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. Com o LINQ, uma consulta é um constructo de linguagem de primeira classe, como classes, métodos, eventos.With LINQ, a query is a first-class language construct, just like classes, methods, events.

Para um desenvolvedor que escreve consultas, a parte mais visível "integrada à linguagem" do LINQ é a expressão de consulta.For a developer who writes queries, the most visible "language-integrated" part of LINQ is the query expression. As expressões de consulta são uma sintaxe declarativa de consulta.Query expressions are written in a declarative query syntax. Usando a sintaxe de consulta, você pode executar operações de filtragem, ordenação e agrupamento em fontes de dados com o mínimo de código.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Você pode usar os mesmos padrões de expressão de consulta básica para consultar e transformar dados em bancos de dados SQL, conjuntos de dados do ADO.NET, documentos XML e fluxos e coleções .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.

O exemplo a seguir mostra a operação de consulta completa.The following example shows the complete query operation. A operação completa inclui a criação de uma fonte de dados, definição da expressão de consulta e execução da consulta em uma instrução foreach.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

Visão geral da expressão de consultaQuery expression overview

  • Expressões de consulta podem ser usadas para consultar e transformar dados de qualquer fonte de dados habilitada para LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Por exemplo, uma única consulta pode recuperar dados de um Banco de Dados SQL e produzir um fluxo XML como saída.For example, a single query can retrieve data from a SQL database, and produce an XML stream as output.

  • As expressões de consulta são fáceis de entender porque elas usam muitos constructos de linguagem C# familiares.Query expressions are easy to master because they use many familiar C# language constructs.

  • As variáveis em uma expressão de consulta são fortemente tipadas, embora em muitos casos você não precise fornecer o tipo explicitamente, pois o compilador pode inferir nele.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. Para obter mais informações, consulte Relacionamentos de tipo em operações de consulta LINQ.For more information, see Type relationships in LINQ query operations.

  • Uma consulta não é executada até que você itere sobre a variável de consulta, por exemplo, em uma instrução foreach.A query is not executed until you iterate over the query variable, for example, in a foreach statement. Para obter mais informações, consulte Introdução a consultas LINQ.For more information, see Introduction to LINQ queries.

  • No tempo de compilação, as expressões de consulta são convertidas em chamadas de método do operador de consulta padrão de acordo com as regras definidas na especificação do C#.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Qualquer consulta que pode ser expressa usando sintaxe de consulta também pode ser expressa usando sintaxe de método.Any query that can be expressed by using query syntax can also be expressed by using method syntax. No entanto, na maioria dos casos, a sintaxe de consulta é mais legível e concisa.However, in most cases query syntax is more readable and concise. Para obter mais informações, consulte Especificação da linguagem C# e Visão geral de operadores de consulta padrão.For more information, see C# language specification and Standard query operators overview.

  • Como uma regra ao escrever consultas LINQ, recomendamos que você use a sintaxe de consulta sempre que possível e a sintaxe de método sempre que necessário.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. Não há semântica ou diferença de desempenho entre as duas formas.There is no semantic or performance difference between the two different forms. As expressões de consulta são geralmente mais legíveis do que as expressões equivalentes escritas na sintaxe de método.Query expressions are often more readable than equivalent expressions written in method syntax.

  • Algumas operações de consulta, como Count ou Max, não apresentam cláusulas de expressão de consulta equivalentes e, portanto, devem ser expressas como chamadas de método.Some query operations, such as Count or Max, have no equivalent query expression clause and must therefore be expressed as a method call. A sintaxe de método pode ser combinada com a sintaxe de consulta de várias maneiras.Method syntax can be combined with query syntax in various ways. Para obter mais informações, consulte Sintaxe de consulta e sintaxe de método em LINQ.For more information, see Query syntax and method syntax in LINQ.

  • As expressões de consulta podem ser compiladas para árvores de expressão ou delegados, dependendo do tipo ao qual a consulta é aplicada.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. As consultas IEnumerable<T> são compiladas para representantes.IEnumerable<T> queries are compiled to delegates. As consultas IQueryable e IQueryable<T> são compiladas para árvores de expressão.IQueryable and IQueryable<T> queries are compiled to expression trees. Para obter mais informações, consulte Árvores de expressão.For more information, see Expression trees.

Próximas etapasNext steps

Para obter mais detalhes sobre o LINQ, comece se familiarizando com alguns conceitos básicos em Noções básicas sobre expressões de consulta, e, em seguida, leia a documentação para a tecnologia LINQ na qual você está interessado: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:

Para saber mais sobre o LINQ, consulte LINQ em C#.To gain a deeper understanding of LINQ in general, see LINQ in C#.

Para começar a trabalhar com o LINQ em C#, consulte o tutorial Trabalhando com LINQ.To start working with LINQ in C#, see the tutorial Working with LINQ.