c# - 使用表达式查询 Azure 表存储
问题描述
我希望通过将表达式而不是 TableQuery 传递到我的存储库来查询表存储,我的目标是:
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
,但没有运气。
有人可以帮我通过表达式查询天蓝色表存储吗?
我使用的 SDK 是 Microsoft.Azure.Cosmos.Table v1.0.7.0;
解决方案
假设针对 Azure 表存储使用 Cosmos 表驱动程序,您应该能够执行以下操作
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;
}
WhereMyTable
实现ITableEntity
和扩展自定义列。
请注意,如果查询可能返回超过一页的数据,那么您需要将 null 替换为TableContinuationToken并循环收集页面。
我同意 Azure 表存储的客户端库的数量和指导正在变得非常令人沮丧。
推荐阅读
- php - 读取csv时如何指定分隔符?
- python - 在 Tensorflow 中训练 while 循环
- java - 会话在springboot项目中过期
- ionic-framework - 如何删除 main.js Ionic 3 中的物理路径?
- mysql - 对于另一个表中的每一行,将一个表中的行写入另一个表
- python - 将 matplotlib 图形转换为相同形状的 numpy 数组
- firebase - 如果 Firestore 对象不存在,则设置它
- .htaccess - 修改 [.htaccess] 以进行身份验证时出现内部服务器错误
- java - 如何通过 imap 协议使用 JavaMail 连接到 gmail?
- coldfusion - 无法找到使用“[括号]”和“在查询中访问属性”之间的区别。点符号