Operadores de consulta padrão em consultas LINQ to Entities
Em uma consulta, você especifica as informações que deseja recuperar da fonte de dados. Uma consulta também pode especificar como essas informações devem ser classificadas, agrupadas e moldadas antes de serem retornadas. O LINQ fornece um conjunto de métodos de consulta padrão que você pode usar em uma consulta. A maioria destes métodos opera em sequências; Neste contexto, uma sequência é um objeto cujo tipo implementa a IEnumerable<T> interface ou a IQueryable<T> interface. A funcionalidade de consulta padrão dos operadores de consulta inclui filtragem, projeção, agregação, classificação, agrupamento, paginação e muito mais. Alguns dos operadores de consulta padrão usados com mais freqüência têm sintaxe de palavra-chave dedicada para que possam ser chamados usando sintaxe de expressão de consulta. Uma expressão de consulta é uma maneira diferente e mais legível de expressar uma consulta do que o equivalente baseado em método. As cláusulas de expressão de consulta são convertidas em chamadas para os métodos de consulta em tempo de compilação. Para obter uma lista de operadores de consulta padrão que têm cláusulas de expressão de consulta equivalentes, consulte Visão geral dos operadores de consulta padrão.
Nem todos os operadores de consulta padrão são suportados em consultas LINQ to Entities. Para obter mais informações, consulte Métodos LINQ suportados e não suportados (LINQ to Entities). Este tópico fornece informações sobre os operadores de consulta padrão específicos do LINQ to Entities. Para obter mais informações sobre problemas conhecidos nas consultas LINQ to Entities, consulte Problemas conhecidos e considerações no LINQ to Entities.
Métodos de Projeção e Filtragem
Projeção refere-se à transformação dos elementos de um conjunto de resultados em uma forma desejada. Por exemplo, você pode projetar um subconjunto das propriedades necessárias de cada objeto no conjunto de resultados, pode projetar uma propriedade e executar um cálculo matemático nela ou pode projetar o objeto inteiro a partir do conjunto de resultados. Os métodos de projeção são Select
e SelectMany
.
A filtragem refere-se à operação de restringir o conjunto de resultados para conter apenas os elementos que correspondem a uma condição especificada. O método de filtragem é Where
.
A maioria das sobrecargas dos métodos de projeção e filtragem são suportadas no LINQ to Entities, com exceção daquelas que aceitam um argumento posicional.
Métodos de Adesão
A associação é uma operação importante em consultas que visam fontes de dados que não têm relações navegáveis entre si. Uma junção de duas fontes de dados é a associação de objetos em uma fonte de dados com objetos na outra fonte de dados que compartilham um atributo ou propriedade comum. Os métodos de junção são Join
e GroupJoin
.
A maioria das sobrecargas dos métodos de junção são suportadas, com exceção daqueles que usam um IEqualityComparer<T>arquivo . Isso ocorre porque o comparador não pode ser traduzido para a fonte de dados.
Definir Métodos
As operações set no LINQ são operações de consulta que baseiam seus conjuntos de resultados na presença ou ausência de elementos equivalentes dentro da mesma coleção (ou conjunto) ou em outra coleção. Os métodos definidos são All
, Any
, , Contains
Concat
, , Distinct
DefaultIfEmpty
, EqualAll
, Except
, Intersect
e Union
.
A maioria das sobrecargas dos métodos definidos são suportadas no LINQ to Entities, embora haja algumas diferenças no comportamento em comparação com o LINQ to Objects. No entanto, os métodos definidos que usam um IEqualityComparer<T> não são suportados porque o comparador não pode ser traduzido para a fonte de dados.
Métodos de encomenda
Ordenação, ou classificação, refere-se à ordenação dos elementos de um conjunto de resultados com base em um ou mais atributos. Ao especificar mais de um critério de classificação, você pode quebrar laços dentro de um grupo.
A maioria das sobrecargas dos métodos de ordenação são suportadas, com exceção daqueles que usam um IComparer<T>arquivo . Isso ocorre porque o comparador não pode ser traduzido para a fonte de dados. Os métodos de ordenação são OrderBy
, OrderByDescending
, ThenBy
, ThenByDescending
, e Reverse
.
Como a consulta é executada na fonte de dados, o comportamento de ordenação pode diferir das consultas executadas no CLR. Isso ocorre porque as opções de ordenação, como ordenação de maiúsculas e minúsculas, ordem kanji e ordem nula, podem ser definidas na fonte de dados. Dependendo da fonte de dados, essas opções de ordenação podem produzir resultados diferentes dos do CLR.
Se você especificar o mesmo seletor de chave em mais de uma operação de pedido, um pedido duplicado será produzido. Isso não é válido e uma exceção será lançada.
Métodos de agrupamento
Agrupamento refere-se à colocação de dados em grupos para que os elementos em cada grupo compartilhem um atributo comum. O método de agrupamento é GroupBy
.
A maioria das sobrecargas dos métodos de agrupamento são suportadas, com exceção daquelas que usam um IEqualityComparer<T>arquivo . Isso ocorre porque o comparador não pode ser traduzido para a fonte de dados.
Os métodos de agrupamento são mapeados para a fonte de dados usando uma subconsulta distinta para o seletor de chave. A subconsulta de comparação do seletor de chaves é executada usando a semântica da fonte de dados, incluindo problemas relacionados à comparação null
de valores.
Métodos de agregação
Uma operação de agregação calcula um único valor a partir de uma coleção de valores. Por exemplo, calcular a temperatura média diária a partir do valor de um mês de valores de temperatura diária é uma operação de agregação. Os métodos agregados são Aggregate
, Average
, , Count
, Max
LongCount
, Min
, e Sum
.
A maioria das sobrecargas dos métodos agregados são suportadas. Para comportamento relacionado a valores nulos, os métodos agregados usam a semântica da fonte de dados. O comportamento dos métodos de agregação quando valores nulos estão envolvidos pode ser diferente, dependendo de qual fonte de dados back-end está sendo usada. O comportamento do método agregado usando a semântica da fonte de dados também pode ser diferente do que é esperado dos métodos CLR. Por exemplo, o comportamento padrão para o Sum
método no SQL Server é ignorar quaisquer valores nulos em vez de lançar uma exceção.
Quaisquer exceções resultantes da agregação, como um estouro da função, são lançadas como exceções de fonte de Sum
dados ou exceções do Entity Framework durante a materialização dos resultados da consulta.
Para os métodos que envolvem um cálculo sobre uma sequência, como Sum
ou Average
, o cálculo real é executado no servidor. Como resultado, conversões de tipo e perda de precisão podem ocorrer no servidor, e os resultados podem diferir do que é esperado usando a semântica CLR.
O comportamento padrão dos métodos agregados para valores nulos/não nulos é mostrado na tabela a seguir:
Método | Sem dados | Todos os valores nulos | Alguns valores nulos | Sem valores nulos |
---|---|---|---|---|
Average |
Retorna null. | Retorna null. | Devolve a média dos valores não nulos numa sequência. | Calcula a média de uma sequência de valores numéricos. |
Count |
Devolve 0 | Devolve o número de valores nulos na sequência. | Retorna o número de valores nulos e não nulos na sequência. | Devolve o número de elementos na sequência. |
Max |
Retorna null. | Retorna null. | Retorna o valor máximo não nulo em uma sequência. | Retorna o valor máximo em uma sequência. |
Min |
Retorna null. | Retorna null. | Retorna o valor mínimo não nulo em uma sequência. | Devolve o valor mínimo numa sequência. |
Sum |
Retorna null. | Retorna null. | Retorna a soma do valor não nulo em uma sequência. | Calcula a soma de uma sequência de valores numéricos. |
Métodos de tipo
Os dois métodos LINQ que lidam com conversão de tipo e teste são suportados no contexto do Entity Framework. Isso significa que os únicos tipos suportados são tipos mapeados para o tipo apropriado do Entity Framework. Para obter uma lista desses tipos, consulte Tipos de modelo conceitual (CSDL). Os métodos de tipo são Convert
e OfType
.
OfType
é suportado para tipos de entidade. Convert
é suportado para tipos primitivos de modelo conceitual. O C# is
e as
os métodos também são suportados.
Métodos de paginação
As operações de paginação retornam um único elemento ou vários elementos de uma sequência. Os métodos de paginação suportados são First
, FirstOrDefault
, Single
, SingleOrDefault
, Skip
e Take
.
Vários métodos de paginação não são suportados, devido à incapacidade de mapear funções para a fonte de dados ou à falta de ordenação implícita de conjuntos na fonte de dados. Os métodos que retornam um valor padrão são restritos a tipos primitivos de modelo conceitual e tipos de referência com padrões nulos. Os métodos de paginação executados em uma sequência vazia retornarão null.