Scrittura di query LINQ sul servizio tabelle
È possibile scrivere query nel servizio tabelle tramite la sintassi LINQ. Gli esempi seguenti illustrano come scrivere query di esempio simili alle query di esempio illustrate in Esecuzione di query su tabelle ed entità, ma usando LINQ anziché il protocollo REST.
Il servizio tabelle supporta l'esecuzione di query semplici che recuperano tutte le proprietà di un'entità; è anche possibile selezionare un subset delle proprietà di un'entità. Il servizio tabelle consente anche di applicare filtri ai risultati delle query di filtro utilizzando l'operatore Where
e di specificare il numero di entità che è possibile restituire utilizzando l'operatore Take
.
Per informazioni dettagliate sugli operatori LINQ supportati dal servizio tabelle, vedere Operatori di query supportati per il servizio tabelle.
Proiezione delle proprietà delle entità
La clausola LINQ select
può essere utilizzata per proiettare un subset di proprietà da una o più entità. Il numero massimo di proprietà che è possibile proiettare è 255, che è anche il numero massimo di proprietà di un'entità.
Per proiettare le proprietà di un'entità, il client deve supportare OData Data Service versione 3.0, indicato specificando le DataServiceVersion
intestazioni o MaxDataServiceVersion
come indicato di seguito:
DataServiceVersion: 3.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Nell'esempio seguente viene illustrato come proiettare le proprietà da una singola entità, utilizzando l'inizializzatore di oggetto necessario:
var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)
where entity.PartitionKey == "MyPartitionKey"
select new { entity.RowKey };
Nell'esempio seguente vengono proiettate 3 proprietà da un'entità con 10 proprietà. In questo esempio, le 10 proprietà di SampleEntity
sono le lettere dalla A alla 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
};
È anche possibile proiettare le proprietà dell'entità usando l'opzione di query $select in una richiesta REST standard. Per altre informazioni, vedere Eseguire query sulle entità.
Per altre informazioni sulle proiezioni e sulle trasformazioni delle entità, vedere Selezionare l'opzione query di sistema ($select) nella documentazione di OData.
Restituzione delle prime n entità
Per restituire n
entità, utilizzare l'operatore LINQ Take
. Si noti che il numero massimo di entità che è possibile restituire in una singola query è 1.000. Se si specifica un valore maggiore di 1.000 per l'operatore Take
viene restituito il codice di errore 400 (Richiesta non valida).
Nell'esempio seguente vengono restituite le prime 10 entità da una tabella Customers:
var query = (from entity in context.CreateQuery<Customer>("Top10Customers")
select entity).Take(10);
Applicazione di filtri alle proprietà della stringa
Nell'esempio seguente vengono applicati filtri su due proprietà String:
var query = from entity in context.CreateQuery<Customer>("SpecificCustomer")
where entity.LastName.Equals("Smith")
&& entity.FirstName.Equals("John")
select entity;
Nell'esempio seguente viene eseguita la corrispondenza dei prefissi utilizzando gli operatori di confronto per restituire le entità con una proprietà LastName
che inizia con la lettera "A":
var query = from entity in context.CreateQuery<Customer>("CustomersA")
where entity.LastName.CompareTo("A") >= 0
&& entity.LastName.CompareTo("B") < 0
select entity;
Applicazione di filtri alle proprietà numeriche
Nell'esempio seguente vengono restituite tutte le entità con una proprietà Age
il cui valore è maggiore di 30:
var query = from entity in context.CreateQuery<Customer>("CustomersOver30")
where entity.Age > 30
select entity;
In questo esempio vengono restituite tutte le entità con una proprietà AmountDue
il cui valore è minore o uguale a 100,25:
var query = from entity in context.CreateQuery<Customer>("CustomersAmountDue")
where entity.AmountDue <= 100.25
select entity;
Applicazione di filtri alle proprietà booleane
Nell'esempio seguente vengono restituite tutte le entità per le quali la proprietà IsActive
è impostata su true
:
var query = from entity in context.CreateQuery<Customer>("ActiveCustomers")
where entity.IsActive == true
select entity;
Applicazione di filtri alle proprietà DateTime
Nell'esempio seguente vengono restituite le entità per le quali la proprietà CustomerSince
è uguale a 10 luglio 2008:
DateTime dt = new DateTime(2008, 7, 10);
var query = from entity in context.CreateQuery<Customer>("CustomerSince")
where entity.CustomerSince.Equals(dt)
select entity;
Vedere anche
Esecuzione di query su tabelle ed entità
Operatori di query supportati per il servizio tabelle