TableQueryParser provides extension methods to the Microsoft Azure TableQuery class which allows them to be run against objects.
- WindowsAzure.Storage v8.1.1
Install-Package TableQueryParser
var filter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith");
var query = new TableQuery<TableEntity>().Where(filter);
var isMatch = rangeQuery.Validate(new TableEntity { PartitionKey = "Smith", RowKey = "ZZZ" }); // Returns true
var data = new List<TableEntity>
{
new TableEntity { PartitionKey = "Smith", RowKey = "Adam" },
new TableEntity { PartitionKey = "Phillips", RowKey = "Steve" },
new TableEntity { PartitionKey = "Phillips", RowKey = "Molly" },
new TableEntity { PartitionKey = "Phillips", RowKey = "E" },
new TableEntity { PartitionKey = "Jones", RowKey = "Quinton" }
};
var partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Phillips");
var rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, "E");
var combineFilters = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter);
var rangeQuery = new TableQuery<TableEntity>().Where(combineFilters);
var filteredResults = rangeQuery.Filter(data); // Returns the Steve Phillips and Molly Phillips table entities
var filter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Smith");
var query = new TableQuery<TableEntity>().Where(filter);
var isMatch = QueryParser.Validate(query.FilterString, new TableEntity { PartitionKey = "Smith", RowKey = "ZZZ" }); // Returns true
var data = new List<TableEntity>
{
new TableEntity { PartitionKey = "Smith", RowKey = "Adam" },
new TableEntity { PartitionKey = "Phillips", RowKey = "Steve" },
new TableEntity { PartitionKey = "Phillips", RowKey = "Molly" },
new TableEntity { PartitionKey = "Phillips", RowKey = "E" },
new TableEntity { PartitionKey = "Jones", RowKey = "Quinton" }
};
var partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Phillips");
var rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, "E");
var combineFilters = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter);
var rangeQuery = new TableQuery<TableEntity>().Where(combineFilters);
var filteredResults = QueryParser.Filter(rangeQuery.FilterString, data); // Returns the Steve Phillips and Molly Phillips table entities
For further example please see the integration tests here.
This is an initial version and not tested thoroughly.
I've made this library for my own use when mocking out Azure's table storage during testing.
TableQueryParser is released under the MIT license.
TableQueryParser was created by Stephen Phillips.