Écriture de requêtes LINQ sur le service Table

Vous pouvez écrire des requêtes sur le service de Table à l'aide de la syntaxe LINQ. Les exemples suivants montrent comment écrire des exemples de requêtes similaires à ceux présentés dans Interrogation de tables et d’entités, mais en utilisant LINQ au lieu du protocole REST.

Le service Table prend en charge l’exécution de requêtes simples qui récupèrent toutes les propriétés d’une entité ; il est également possible de sélectionner un sous-ensemble des propriétés d’une entité. Le service de Table prend également en charge le filtrage des résultats de requête en utilisant l'opérateur Where, et en spécifiant le nombre d'entités à retourner à l'aide de l'opérateur Take.

Pour plus d’informations sur les opérateurs LINQ pris en charge par le service De table, consultez Opérateurs de requête pris en charge pour le service de table.

Projection de propriétés d'entité.

La clause LINQ select peut être utilisée pour projeter un sous-ensemble de propriétés d'une entité ou d'entités. Le nombre maximal de propriétés qui peuvent être projetées est de 255, ce qui est également le nombre maximal de propriétés dans une entité.

Pour projeter les propriétés d’une entité, le client doit prendre en charge OData Data Service version 3.0, indiqué en spécifiant les DataServiceVersion en-têtes ou MaxDataServiceVersion comme suit :

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

L'exemple suivant montre comment projeter des propriétés de projet à partir d'une seule entité, à l'aide de l'initialiseur d'objet requis :

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

L'exemple suivant projette 3 propriétés à partir d'une entité qui a 10 propriétés. Dans cet exemple, les 10 propriétés de SampleEntity sont des lettres de 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  
                                      };  

Vous pouvez également projeter des propriétés d'entités à l'aide de l'option de requête $select dans une requête REST standard. Pour plus d’informations, consultez Entités de requête.

Pour plus d’informations sur les projections et transformations d’entités, consultez Sélectionner l’option de requête système ($select) dans la documentation OData.

Retour des n entités supérieures

Pour retourner n entités, utilisez l'opérateur LINQ Take. Notez que le nombre maximal d'entités qui peuvent être retournées dans une même requête est égal à 1 000. La spécification d'une valeur supérieure à 1 000 pour l'opérateur Take entraîne un code d'erreur 400 (Demande incorrecte).

L'exemple suivant retourne les 10 premières entités d'une table appelée Customers :

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

Filtrage par propriété de chaîne

L'exemple suivant filtre sur deux propriétés de chaîne :

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

L'exemple suivant exécute la mise en correspondance de préfixe en utilisant les opérateurs de comparaison pour retourner des entités avec une propriété LastName commençant par la lettre « A » :

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

Filtrage par propriété numérique

L'exemple suivant retourne toutes les entités avec une propriété Age dont la valeur est supérieure à 30 :

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

Cet exemple retourne toutes les entités avec une propriété AmountDue dont la valeur est inférieure ou égale à 100,25 :

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

Filtrage par propriété booléenne

L'exemple suivant retourne toutes les entités pour lesquelles la propriété IsActive a la valeur true :

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

Filtrage par propriété DateTime

L'exemple suivant retourne les entités pour lesquelles la propriété CustomerSince est égale au 10 juillet 2008 :

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

Voir aussi

Interrogation de tables et d’entités
Opérateurs de requête pris en charge pour le service de Table