Skip to content

Korthax/TableQueryParser

Repository files navigation

TableQueryParser

TableQueryParser provides extension methods to the Microsoft Azure TableQuery class which allows them to be run against objects.

NuGet Version

Dependencies

  • WindowsAzure.Storage v8.1.1

Installation

Install-Package TableQueryParser

Usage

Via extension methods

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

Directly

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

Further examples

For further example please see the integration tests here.

General Notes

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.

License

TableQueryParser is released under the MIT license.

Contributors

TableQueryParser was created by Stephen Phillips.

About

Provides extension methods to the TableQuery class which allow it to be run against in-memory objects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published