Operações básicas consulta (LINQ)
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 LINQ (Guia de programação C#)
Visão geral de operadores de consulta padrão
Observação: |
---|
Se você já estão familiarizados com uma linguagem de consulta, sistema autônomo SQL ou XQuery, você pode ignorar maioria das Este tópico .R ER sobre o " fromcláusula"a próxima seção para saber mais sobre a ordem das cláusulas no LINQ expressões de consulta. |
Como obter uma fonte de dados
In a LINQ consulta, a primeira etapa é especificar a fonte de dados. Em translation from VPE for Csharp sistema autônomo in a maioria das linguagens de programação uma variável deve ser declarada antes que ele pode ser usado.In a LINQ consulta, o from cláusula vier primeiro para apresentar o (fonte de dadoscustomers) 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 um foreach Faça um loop, exceto pelo fato de que nenhuma interação real ocorre em uma expressão de consulta. Quando a consulta é executada, a variável de intervalo servirá sistema autônomo uma referência a cada elemento sucessivo customers. Porque o compilador pode inferir o tipo de cust, não é necessário especificá-lo explicitamente. Variáveis de alcance adicionais podem ser introduzidas por um let cláusula. Para obter mais informações, consulte permitir que a cláusula (Referência C#).
Observação: |
---|
Para não- dados genéricos sour c s es uch sistema autônomo ArrayList, a variável de intervalo deve ser digitada explicitamente. Para obter mais informações, consulte Como: consulta uma ArrayList com LINQ e de cláusula (Referência C#). |
Filtro
Provavelmente, a operação de consulta mais comum é aplicar um filtro no formulário de uma expressão booliana.O filtro faz com que a consulta retorne apenas esses elementos para o qual a expressão for verdadeira.O resultado é produzido usando o where cláusula. O filtro em vigor Especifica quais elementos para excluir da sequência de fonte.No exemplo a seguir, apenas esses customers quem tem um endereço em Londres são retornados.
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;
Você pode usar a lógica translation from VPE for Csharp familiar AND e OR operadores para aplicar sistema autônomo muitas expressões conforme necessário de filtro do where cláusula. Por exemplo, para retornar apenas os clientes de "Londres"ANDcujo nome é "Devon" faria gravar o código a seguir:
where cust.City=="London" && cust.Name == "Devon"
Para retornar aos 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 C#).
Pedidos
Em geral, é conveniente classificar os dados retornados.The orderby cláusula fará com que os elementos na sequência retornada para ser classificados de acordo com o comparador padrão para o tipo que está sendo classificado. Por exemplo, a consulta a seguir pode ser estendida para classificar os resultados com base na Name propriedade. Porque Name é uma seqüência de caracteres, o comparador padrão executa uma classificar alfabético de à Z.
var queryLondonCustomers3 =
from cust in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;
Para solicitar 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 C#).
Agrupamento
The group cláusula permite agrupar os resultados com base em uma chave que você especificar. Por exemplo você pode especificar que os resultados devem ser agrupados pela City para que todos os clientes de Londres ou de Paris estejam em grupos individuais. Nesse caso, cust.City é a chave.
Observação: |
---|
Os tipos são explícitos na seguir Exemplos Para ilustrar o conceito de .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 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 dos elementos que estão agrupadas sob essa chave. Ao iterar através de uma consulta que produz uma sequência de grupos, você deve usar um aninhados foreach loop. O loop externo itera sobre cada agrupar e o loop interno itera sobre membros de cada agrupar.
Se você deve se referir a resultados de uma operação de agrupar, você pode usar o into palavra-chave para criar um identificador que pode ser consultado posteriormente. A seguinte consulta retorna apenas daqueles 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 de AAgruparar (Referência C#).
Ingressando em
As operações de unir criar associações entre as seqüências não são explicitamente modelados nas fontes de dados.Por exemplo, você pode executar uma unir para localizar todos os clientes em Londres que pedir produtos de fornecedores que estão em Paris.In LINQ o join cláusula sempre funciona em coleções de objetos em vez de tabelas do banco de dados diretamente. In LINQ não é necessário usar join sempre que você faz no SQL sistema autônomo chaves externas em LINQ são representados no modelo de objeto sistema autônomo propriedades que possui uma coleção de itens. Por exemplo, um Customer objeto contém uma coleção de Order objetos. Em vez de executar uma unir, você pode acessar os pedidos, usando notação de ponto:
from order in Customer.Orders...
Para obter mais informações, consulte (Referência C#) de cláusula de Junção.
Selecionar (projeções)
The selectcláusula produz os resultados da consulta e especifica a "forma" 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 do objeto. Quando o select cláusula produz um valor diferente de uma cópia do elemento de fonte, 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 LINQ e Selecionar cláusula (Referência C#).
Consulte também
Conceitos
Expressões de consulta LINQ (Guia de programação C#)
Referência
Tipos anônimos (Guia de programação C#)