使用表达式查询 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"));

我在 CreateQueryCreateQuery 上看不到任何接受表达式的方法,只能接受文本。

我也查看了是否可以将表达式转换为过滤文本,例如 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 存储的客户端库的数量和指导变得非常令人沮丧。