sac*_*chu 8 c# asp.net azure azure-table-storage azure-tablequery
我正在使用Azure.Data.Tables包和TableClient.QueryAsync()方法来获取查询结果。我希望结果将其用于分页。我在https://learn.microsoft.com/en-us/dotnet/api/azure.data.tables.tableclient.queryasync?view=azure-dotnet中遇到了这段代码
Pageable<T> pageable = client.QueryAsync<T>(filter : value, maxPerPage : 10);
Run Code Online (Sandbox Code Playgroud)
我应该做出哪些改变?
提前致谢 !!:)
Kal*_*SFT 20
这是我们示例中的一个片段。
AsyncPageable<TableEntity> queryResultsMaxPerPage = tableClient.QueryAsync<TableEntity>(filter: $"PartitionKey eq '{partitionKey}'", maxPerPage: 10);
await foreach (Page<TableEntity> page in queryResultsMaxPerPage.AsPages())
{
Console.WriteLine("This is a new page!");
foreach (TableEntity qEntity in page.Values)
{
Console.WriteLine($"# of {qEntity.GetString("Product")} inventoried: {qEntity.GetInt32("Quantity")}");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我通过创建一个扩展方法解决了这个问题,IAsyncEnumerable
该方法将返回IAsyncEnumerable
. AsPages()
调用后,AsyncPageable<T> query
您IAsyncEnumerable<Page<T>>
可以使用此方法从中获取第一页。
static class IAsyncEnumerableExtensions
{
public static async Task<T?> FirstOrDefault<T>(this IAsyncEnumerable<T> asyncEnumerable)
{
await foreach (var item in asyncEnumerable)
{
return item;
}
return default;
}
}
Run Code Online (Sandbox Code Playgroud)
该Page<T>
对象有一个continuationToken
可以传递给该AsPages(string)
方法的属性,因此您可以通过以下方式获取下一页:
query.AsPages(continuationToken).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
为了能够获取上一页,您必须缓存 continuationTokens,或者对于第一页,只需调用query.AsPages().FirstOrDefault();
(没有 continuationToken)。
检查文档以获取更多详细信息(单击参数和返回类型)。
我使用这个示例作为令牌缓存的灵感。您还可以查找使用 Microsoft.Azure.Cosmos.Table 库的示例,这里的 ContinuationTokens 使用了类似的概念。
归档时间: |
|
查看次数: |
20807 次 |
最近记录: |