Quoter Quoter - 1 year ago 331
C# Question

Multiple filter conditions Azure table storage

How can I set multiple filters on a Azure Table Storage?

This is what I've tried:

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);

This doesn't work because
only takes 3 parameters. And I need an extra parameter for the 2nd date.

My second try:

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);

This returns
400 bad request
. But if I remove the 'datetime' it runs but returns no results while it should return a few 100 records.

According to this doc from msdn, that is how datetimes should be formatted.

My result should be all records that are between two dates.

How can I make this work?

Answer Source

First "and" your partition filter with one of the date filters, then "and" the intermediate result with the other date filter.

string date1 = TableQuery.GenerateFilterConditionForDate(
                   "Date", QueryComparisons.GreaterThanOrEqual,
string date2 = TableQuery.GenerateFilterConditionForDate(
                   "Date", QueryComparisons.LessThanOrEqual,
string finalFilter = TableQuery.CombineFilters(
                        TableOperators.And, date2);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download