Operações básicas de consulta do LINQ (C#)

Este tópico fornece uma breve introdução a LINQ expressões de consulta e alguns dos tipos típicos de operações executadas em uma consulta. Informações mais detalhadas estão nos seguintes tópicos:

<>>Expressões de consulta do LINQ (guia de programação TRANSLATION FROM VPE FOR CSHARP)

Visão geral operadores de consulta padrão

ObservaçãoObservação

Se você já estiver familiarizado com uma linguagem de consulta, como, por exemplo, SQL ou XQuery, você pode ignorar a maioria deste tópico. Leia sobre o "from cláusula" na próxima seção para saber mais sobre a ordem das cláusulas de LINQ expressões de consulta.

A obtenção de uma fonte de dados

Em um LINQ a consulta, a primeira etapa é especificar a fonte de dados. Em C# como na maioria das linguagens de programação uma variável deve ser declarada antes que ele possa ser usado. Em um LINQ a consulta, o from cláusula vier primeiro para apresentar a fonte de dados (customers) e o variável de intervalo (cust).

//queryAllCustomers is an IEnumerable<Customer>
var queryAllCustomers = from cust in customers
                        select cust;

A variável de intervalo é como a variável de iteração em uma foreach loop, exceto que nenhum iteração real ocorre em uma expressão de consulta. Quando a consulta é executada, a variável de intervalo servirá como uma referência para cada elemento sucessivo customers. Porque o compilador pode inferir o tipo de cust, você não precisará especificá-la explicitamente. Variáveis de alcance adicionais podem ser introduzidas por um let cláusula. Para obter mais informações, consulte Deixe que a cláusula (referência de TRANSLATION FROM VPE FOR CSHARP).

ObservaçãoObservação

Para os dados não-genéricas, como fontes ArrayList, a variável de intervalo deve ser explicitamente digitada. Para obter mais informações, consulte Como: Consultar um ArrayList com LINQ e (referência de TRANSLATION FROM VPE FOR CSHARP) da cláusula FROM.

Filtro

Provavelmente a operação de consulta mais comum é aplicar um filtro no formulário de uma expressão Booleana. O filtro faz com que a consulta retornar apenas os elementos para os quais a expressão for verdadeira. O resultado é produzido usando o where cláusula. O filtro no efeito especifica quais elementos podem excluir a seqüência de origem. No exemplo a seguir, somente aqueles customers que têm um endereço em Londres são retornados.

var queryLondonCustomers = from cust in customers
                           where cust.City == "London"
                           select cust;

Você pode usar o familiar C# lógica AND e OR operadores para aplicar como muitas expressões, conforme necessário de filtro de where cláusula. Por exemplo, para retornar apenas os clientes a partir de "Londres" ANDcujo nome é "Juliana Paes" Você deve escrever o código a seguir:

where cust.City=="London" && cust.Name == "Devon"

Para retornar a clientes de Londres ou Paris, você escreveria o seguinte código:

where cust.City == "London" || cust.City == "Paris"

Para obter mais informações, consulte onde cláusula (referência de TRANSLATION FROM VPE FOR CSHARP).

Pedidos

Muitas vezes é conveniente classificar os dados retornados. O orderby cláusula fará com que os elementos na seqüência retornada para ser classificados de acordo com o comparador padrão para o tipo que está sendo classificado. Por exemplo, a seguinte consulta pode ser estendida para classificar os resultados com base na Name propriedade. Porque Name é uma seqüência, o comparador padrão realiza a classificação alfabética de à z

var queryLondonCustomers3 = 
    from cust in customers
    where cust.City == "London"
    orderby cust.Name ascending
    select cust;

Para ordenar os resultados em ordem inversa de z a, use o orderby…descending cláusula.

Para obter mais informações, consulte cláusula OrderBy (referência de TRANSLATION FROM VPE FOR CSHARP).

Agrupamento

O group cláusula permite agrupar os resultados com base em uma chave que você especificar. Por exemplo, você poderia especificar que os resultados devem ser agrupados pela City para que todos os clientes de Londres ou Paris estão em grupos individuais. Nesse caso, cust.City é a chave.

ObservaçãoObservação

Os tipos são explícitos nos exemplos a seguir para ilustrar o conceito. Você também pode usar digitação implícita para custQuery, group, e customer para permitir que o compilador determinar o tipo exato.

// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
  var queryCustomersByCity =
      from cust in customers
      group cust by cust.City;

  // customerGroup is an IGrouping<string, Customer>
  foreach (var customerGroup in queryCustomersByCity)
  {
      Console.WriteLine(customerGroup.Key);
      foreach (Customer customer in customerGroup)
      {
          Console.WriteLine("    {0}", customer.Name);
      }
  }

Quando você terminar de uma consulta com um group cláusula, seus resultados assumem a forma de uma lista de listas. Cada elemento na lista é um objeto que tem um Key membro e uma lista de elementos que estão agrupadas sob a chave. Quando você itera através de uma consulta que produz uma seqüência de grupos, você deve usar um aninhadas foreach loop. O loop externo itera em cada grupo, e o loop interno itera sobre membros do grupo.

Se você deve consultar os resultados de uma operação de grupo, você pode usar o into palavra-chave para criar um identificador que pode ser consultado posteriormente. A consulta a seguir retorna apenas os grupos que contêm mais de dois clientes:

// custQuery is an IEnumerable<IGrouping<string, Customer>>
var custQuery =
    from cust in customers
    group cust by cust.City into custGroup
    where custGroup.Count() > 2
    orderby custGroup.Key
    select custGroup;

Para obter mais informações, consulte cláusula Group (referência de TRANSLATION FROM VPE FOR CSHARP).

Ingressando em

As operações de associação criar associações entre as seqüências que não são explicitamente modelados nas fontes de dados. Por exemplo, você pode executar uma associação para localizar todos os clientes e distribuidores que possuem o mesmo local. Na LINQ a join cláusula sempre funciona em relação a coleções de objeto em vez de tabelas de banco de dados diretamente.

var innerJoinQuery =
    from cust in customers
    join dist in distributors on cust.City equals dist.City
    select new { CustomerName = cust.Name, DistributorName = dist.Name };

No LINQ você não precisará usar join freqüentemente você fazer SQL porque chaves externas em LINQ são representados no modelo de objeto como propriedades que mantenha uma coleção de itens. Por exemplo, um Customer objeto contém uma coleção de Order objetos. Em vez de executar uma associação, você pode acessar os pedidos, usando a notação de ponto:

from order in Customer.Orders...

Para obter mais informações, consulte <>cláusula de associação de>(TRANSLATION FROM VPE FOR CSHARP Reference).

Selecionando (projeções)

O select cláusula produz os resultados da consulta e especifica a forma de"" ou o tipo de cada elemento retornado. Por exemplo, você pode especificar se os resultados consistirá completa Customer objetos, apenas um membro, um subconjunto de membros ou algum tipo de resultado completamente diferente com base em um cálculo ou nova criação de objeto. Quando o select cláusula produz algo diferente de uma cópia do elemento de origem, a operação é chamada um projeção. O uso de projeções para transformar dados é um recurso poderoso de LINQ expressões de consulta. Para obter mais informações, consulte Transformações de dados com o LINQ (C#) e Selecione a cláusula (referência de TRANSLATION FROM VPE FOR CSHARP).

Consulte também

Referência

Tipos anônimos (guia de programação TRANSLATION FROM VPE FOR CSHARP)

Conceitos

<>>Expressões de consulta do LINQ (guia de programação TRANSLATION FROM VPE FOR CSHARP)

Operações básicas de consulta (Visual Basic)

Outros recursos

Guia de Introdução do LINQ em C#

Palavras-chave de consulta (referência de TRANSLATION FROM VPE FOR CSHARP)