Condividi tramite


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