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