2017-09-28 3 views
0

Dans le Azure Table Storage SDK documentation, il existe de nombreux exemples de construction de requêtes LINQ sur les tables en utilisant le code sous la forme:Dans le SDK Azure Table Storage, quel est l'objectif de GenerateFilterCondition?

TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith")); 

Je comprends que GenerateFilterCondition crée un prédicat pour passer à Where - qui fonctionne de la même manière un (pour exemple) Func<CustomerEntity, bool> serait, mais je ne trouve rien qui explique pourquoi il est nécessaire, par opposition à l'écriture:

TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>().Where(c => c.PartitionKey == "Smith"); 

Qu'est-ce que cette méthode d'aide faire pour vous que l'écriture d'une expression lambda simple comme LIN « normale » Q ne le fait pas?

Répondre

0

Peut être qu'il a causé par hypothèse forte, que vous presque toujours interroger les données par specifing RowKey et PartitionKey - il est rapide (en raison de l'architecture des tables de stockage d'azur intérieur) et prévisible, mais si vous voulez construire la condition de recherche plus complexe , vous devez utiliser TableQuery.GenerateFilterCondition constructeur au lieu de standart Entity Framework.Where comme prédicat, à savoir Expression<Func<T, bool>>. Aussi, je pense que TableQuery.GenerateFilterCondition ne vous offrira pas quelque chose de spécial, sauf des occasions de but.

Si vous voulez utiliser la syntaxe prédicat confortable, vous pouvez utiliser Azure.TableStorage.API bibliothèque, ce qui vous permet d'écrire des requêtes comme celle-ci:

var api = new AzureTableStorageAPI(); 
var date = new DateTime(1990, 1, 10); 
var persons = api.GetEntities<Person>(x => x.BirthDay > date && x.PartitionKey == "Man" && (x.Age > 30 || x.Name == "Mike"));