使用表达式查询 Azure Table 存储
Querying Azure Table Storage with an expression
我希望通过将表达式而不是 TableQuery 传递到我的存储库来查询 table 存储,我的目标是:
public async Task<IEnumerable<FiltersEntity>> Get(Expression<Func<FiltersEntity, bool>> query)
{
var table = _tableStorageConnector.CreateTableIfNotExists(_tableName);
return await table.CreateQuery<FiltersEntity>().Where(query).ToList();
}
理想用法:
var data = await _filterRepository.Get(x => x.PartitionKey.Equals("examplepartitionkey"));
我在 CreateQuery
或 CreateQuery
上看不到任何接受表达式的方法,只能接受文本。
我也查看了是否可以将表达式转换为过滤文本,例如 PartitionKey eq examplepartitionkey
,但没有成功。
有人可以帮我通过表达式查询 azure table 存储吗?
我使用的SDK是Microsoft.Azure.Cosmos.Table v1.0.7.0;
假设针对 Azure Table 存储使用 Cosmos table 驱动程序,您应该能够按照
public async Task<IEnumerable<MyTable>> MyQuery(Expression<Func<MyTable, bool>> predicate)
{
var tableClient = new CloudTableClient(
new Uri("..."),
new StorageCredentials(".."));
var table = tableClient.GetTableReference("MyTable");
var tableQuery = table.CreateQuery<MyTable>()
.Where(predicate)
.AsTableQuery(); // << convert back from IQueryable to TableQuery
var onePage = await table.ExecuteQuerySegmentedAsync(tableQuery, null);
return onePage.Results;
}
其中 MyTable
实现了 ITableEntity
并扩展了自定义列。
请注意,如果查询可能 return 多于一页数据,那么您需要用 替换 null 并循环收集页面。
我同意 Azure Table 存储的客户端库的数量和指导变得非常令人沮丧。
我希望通过将表达式而不是 TableQuery 传递到我的存储库来查询 table 存储,我的目标是:
public async Task<IEnumerable<FiltersEntity>> Get(Expression<Func<FiltersEntity, bool>> query)
{
var table = _tableStorageConnector.CreateTableIfNotExists(_tableName);
return await table.CreateQuery<FiltersEntity>().Where(query).ToList();
}
理想用法:
var data = await _filterRepository.Get(x => x.PartitionKey.Equals("examplepartitionkey"));
我在 CreateQuery
或 CreateQuery
上看不到任何接受表达式的方法,只能接受文本。
我也查看了是否可以将表达式转换为过滤文本,例如 PartitionKey eq examplepartitionkey
,但没有成功。
有人可以帮我通过表达式查询 azure table 存储吗?
我使用的SDK是Microsoft.Azure.Cosmos.Table v1.0.7.0;
假设针对 Azure Table 存储使用 Cosmos table 驱动程序,您应该能够按照
public async Task<IEnumerable<MyTable>> MyQuery(Expression<Func<MyTable, bool>> predicate)
{
var tableClient = new CloudTableClient(
new Uri("..."),
new StorageCredentials(".."));
var table = tableClient.GetTableReference("MyTable");
var tableQuery = table.CreateQuery<MyTable>()
.Where(predicate)
.AsTableQuery(); // << convert back from IQueryable to TableQuery
var onePage = await table.ExecuteQuerySegmentedAsync(tableQuery, null);
return onePage.Results;
}
其中 MyTable
实现了 ITableEntity
并扩展了自定义列。
请注意,如果查询可能 return 多于一页数据,那么您需要用
我同意 Azure Table 存储的客户端库的数量和指导变得非常令人沮丧。