Plusieurs conditions de filtrage Azure table storage
Comment puis-je mettre plusieurs filtres sur Azure Table Storage?
C'est ce que j'ai essayé:
string partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "partition1");
string date1 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.GreaterThanOrEqual, "31-8-2013T14:15:14Z");
string date2 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.LessThanOrEqual, "31-8-2013T14:15:14Z");
string finalFilter = TableQuery.CombineFilters(partitionFilter, TableOperators.And, date1);
Cela ne fonctionne pas parce que TableQuery.CombineFilters()
ne prend 3 paramètres. Et j'ai besoin d'un paramètre supplémentaire pour la 2ème date.
Mon deuxième essai:
string filter = "PartitionKey eq 'partition1' and Date ge datetime'31-8-2013T14:15:14Z' and Date lt datetime'31-8-2013T14:19:10Z'";
TableQuery<CustomEntity> query = new TableQuery<CustomEntity>().Where(filter).Take(5);
Cela renvoie 400 bad request
. Mais si je supprime le 'datetime' il fonctionne, mais ne renvoie pas de résultat alors qu'il devrait revenir quelques 100 enregistrements.
Selon cette doc à partir de msdn, c'est comment datetimes doivent être formatées.
Mon résultat devrait être tous les dossiers qui sont entre les deux dates.
Comment puis-je faire ce travail?
OriginalL'auteur Quoter | 2013-08-31
Vous devez vous connecter pour publier un commentaire.
Première "et" votre partition de filtre avec l'un des filtres de date, puis "et" le résultat intermédiaire avec les autres filtre de date.
DateTime
comparisions que vous êtes au courant?Il semble qu'il y a différentes énumérations pour chaque type de filtre que vous faites. Et pour la date c'est
TableQuery.GenerateFilterConditionForDate
. Et cela a fait le tour. Damith, pouvez-vous définir ce trop dans votre réponse?OriginalL'auteur Damith
Je me demandais la même chose. J'ai écrit une extension de la TableQuery classe qui fonctionne très bien.
C'est un changement simple qui me fait me demander si nous allons sur l'interrogation avec plusieurs filtres de manière incorrecte.
Or
filtres, puisFilterString
ressemblera((() or (Foo eq '1')) or (Foo eq '2')) or (Foo eq '3')
. SiFilterString
est vide, ajoutez juste le filtre lui-même:@this.FilterString = @this.FilterString == null ? filter : TableQuery.CombineFilters(@this.FilterString, TableOperators.Or, filter);
.OriginalL'auteur LivingOnACloud
Je suis en utilisant De Stockage Windows Azure 7.0.0 et vous pouvez utiliser une requête Linq de sorte que vous n'avez pas besoin de combiner des filtres plus:
Voici la requête générée :
Vous pouvez remarquer que:
OriginalL'auteur Thomas
Voulais juste apporter une réponse de plus.
Le code de la raison ci-dessus est défaut est parce que la valeur de date/heure doit être entrée dans
yyyy-MM-ddTHH:mm:ssZ
format. Si votre requête doit être:OriginalL'auteur Gaurav Mantri
Juste de la manipulation le cas d'une nouvelle requête qui ne dispose pas d'un filtre déjà et basé sur @LivingOnACloud, je serais plutôt de l'écrire de cette façon:
Et le reste suit la même case, les choses peuvent aller plus agréable.
OriginalL'auteur Assil