我希望通过将表达式传递到我的存储库而不是 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
,但没有成功。
有人可以帮我通过表达式查询azure表存储吗?
我使用的 SDK 是 Microsoft.Azure.Cosmos.Table v1.0.7.0;
最佳答案
由于 Google 和 Bing 似乎无法理解 WATS 与 Azure.Data.Tables 的区别,我将这个示例留在这里供其他搜索如何使用新 SDK v12 的人
AsyncPageable<SimpleEntity> EventsQueryAsyncTask(CancellationToken ct)
{
var rowKeyStart = partition.EventVersionRowKey(startVersion);
var rowKeyEnd = partition.EventVersionRowKey(startVersion + sliceSize - 1);
var partitioned = partition.AsPartitionExpression<SimpleEntity>();
var expression = partitioned.Body;
var parameters = partitioned.Parameters[0]; // NOTE: use this if you have parameters to pass into your expression otherwise remove this variable...
var lambda = Expression.Lambda<Func<SimpEntity, bool>>
(
Expression.AndAlso
(
expression,
Query.WithinRangeAndLowerBoundEquality<SimpEntity>(rowKeyStart, rowKeyEnd).Body
),
parameters // see comment above...
);
return client.QueryAsync
(
filter: lambda,
maxPerPage: 100,
select: null, // or pass in an IEnumerable<string> of columns you want to limit the projection to...
cancellationToken: ct
);
}
关于c# - 使用表达式查询 Azure 表存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69539205/