Compartilhar via


Gravando consultas LINQ no serviço Tabela

É possível escrever consultas ao serviço Tabela usando sintaxe LINQ. Os exemplos a seguir mostram como gravar consultas de exemplo semelhantes às consultas de exemplo mostradas em Consultar Tabelas e Entidades, mas usando LINQ em vez do protocolo REST.

O serviço Tabela dá suporte à execução de consultas simples que recuperam todas as propriedades de uma entidade; Também é possível selecionar um subconjunto das propriedades de uma entidade. O serviço Tabela também oferece suporte à filtragem de resultados da consulta usando o operador Where e especificando quantas entidades devem ser retornadas usando o operador Take.

Para obter detalhes sobre quais operadores LINQ têm suporte no serviço Tabela, consulte Operadores de consulta com suporte para o Serviço de Tabela.

Projeção de propriedades de entidade

A cláusula select do LINQ pode ser usada para projetar um subconjunto de propriedades de uma ou mais entidades. O número máximo de propriedades que podem ser projetadas é 255, que também é o número máximo de propriedades em uma entidade.

Para projetar as propriedades de uma entidade, o cliente deve dar suporte ao OData Data Service Versão 3.0, indicado especificando os cabeçalhos ou MaxDataServiceVersion da DataServiceVersion seguinte maneira:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

O exemplo a seguir demonstra como projetar as propriedades de uma única entidade, usando o inicializador de objeto necessário:

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                 where entity.PartitionKey == "MyPartitionKey"  
                 select new { entity.RowKey };  

O exemplo a seguir projeta 3 propriedades de uma entidade que tem 10 propriedades. Neste exemplo, as 10 propriedades de SampleEntity são as letras de A a J:

IEnumerable<SampleEntity> query = from entity in  
                                       dataServiceContext.CreateQuery<SampleEntity>(tableName)  
                                       where entity.PartitionKey == "MyPartitionKey"  
                                       select new SampleEntity  
                                      {  
                                          PartitionKey = entity.PartitionKey,  
                                          RowKey = entity.RowKey,  
                                          A = entity.A,  
                                          D = entity.D,  
                                          I = entity.I  
                                      };  

Você também pode projetar propriedades de entidade usando a opção de consulta $select em uma solicitação REST padrão. Para obter mais informações, consulte Entidades de consulta.

Para obter mais informações sobre projeções e transformações de entidade, consulte Selecionar opção de consulta do sistema ($select) na documentação do OData.

Retornando as principais entidades n

Para retornar n entidades, use o operador LINQ Take. Observe que o número máximo de entidades que podem ser retornadas em uma única consulta é 1.000. A especificação de um valor maior que 1.000 para o operador Take resulta no código de erro 400 (Solicitação Incorreta).

O exemplo a seguir retorna as 10 principais entidades de uma tabela Clientes:

var query = (from entity in context.CreateQuery<Customer>("Top10Customers")  
                 select entity).Take(10);  

Filtrando nas propriedades de cadeia de caracteres

O exemplo a seguir é filtrado com base em duas propriedades String:

var query = from entity in context.CreateQuery<Customer>("SpecificCustomer")  
                 where entity.LastName.Equals("Smith")  
                 && entity.FirstName.Equals("John")  
                 select entity;  

O exemplo a seguir executa a correspondência de prefixo usando operadores de comparação para retornar entidades com uma propriedade LastName começando com a letra 'A':

var query = from entity in context.CreateQuery<Customer>("CustomersA")  
                 where entity.LastName.CompareTo("A") >= 0  
                 && entity.LastName.CompareTo("B") < 0  
                 select entity;  

Filtrando em propriedades numéricas

O exemplo a seguir retorna todas as entidades com uma propriedade Age cujo valor é maior que 30:

var query = from entity in context.CreateQuery<Customer>("CustomersOver30")  
                 where entity.Age > 30  
                 select entity;  

Este exemplo retorna todas as entidades com uma propriedade AmountDue cujo valor é menor ou igual a 100,25:

var query = from entity in context.CreateQuery<Customer>("CustomersAmountDue")  
                 where entity.AmountDue <= 100.25  
                 select entity;  

Filtrando em Propriedades Boolianas

O exemplo a seguir retorna todas as entidades nas quais a propriedade IsActive está definida como true:

var query = from entity in context.CreateQuery<Customer>("ActiveCustomers")  
                 where entity.IsActive == true  
                 select entity;  

Filtrando em Propriedades DateTime

O exemplo a seguir retorna as entidades nas quais a propriedade CustomerSince é igual a 10 de julho de 2008:

DateTime dt = new DateTime(2008, 7, 10);  
var query = from entity in context.CreateQuery<Customer>("CustomerSince")  
                 where entity.CustomerSince.Equals(dt)  
                 select entity;  

Consulte Também

Consultando tabelas e entidades
Operadores de consulta com suporte do serviço Tabela