获取从蔚蓝的表存储
问题描述:
所有记录使用此代码块获取从蔚蓝的表存储
try
{
StorageCredentials creds = new StorageCredentials(accountName, accountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
CloudTableClient client = account.CreateCloudTableClient();
CloudTable table = client.GetTableReference("serviceAlerts");
TableOperation retrieveOperation = TableOperation.Retrieve<ServiceAlertsEntity>("ServiceAlerts", "b9ccd839-dd99-4358-b90f-46781b87f933");
TableResult query = table.Execute(retrieveOperation);
if (query.Result != null)
{
outline = outline + ((ServiceAlertsEntity) query.Result).alertMessage + " * ";
}
else
{
Console.WriteLine("No Alerts");
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
我能够检索与在检索中提到的分区和rowkey单个记录。
有没有一种方法可以获取存储在ServiceAlerts分区中的所有记录?
我已经尝试了第二个参数
TableOperation retrieveOperation = TableOperation.Retrieve<ServiceAlertsEntity>(
"ServiceAlerts","b9ccd839-dd99-4358-b90f-46781b87f933");
一个通配符(*),但它不返回任何东西。
答
你需要指定一个TableQuery,这会给你所有的实体,或者你可以指定一个TableQuery.GenerateFilterCondition
来过滤行。
TableQuery<ServiceAlertsEntity> query = new TableQuery<ServiceAlertsEntity>();
foreach (ServiceAlertsEntity entity in table.ExecuteQuery(query))
{
Console.WriteLine("{0}, {1}\t{2}\t{3}", entity.PartitionKey, entity.RowKey,
entity.Field1, entity.Field2);
}
答
您正在使用错误的类。使用TableQuery检索多个结果。 https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.storage.table.tablequery.aspx
答
如果你需要记录的进一步控制返回,您可以使用ExecuteQuerySegmentedAsync
在一次检索数据的页面(约1000条记录)。
var alerts = new List<ServiceAlertsEntity>();
var query = new TableQuery<ServiceAlertsEntity>();
TableContinuationToken continuationToken = null;
do
{
var page = await table.ExecuteQuerySegmentedAsync(query, continuationToken);
continuationToken = page.ContinuationToken;
alerts.AddRange(page.Results);
}
while (continuationToken != null);
或者,如果您需要限制结果,例如,通过分区键,可以通过在上述代码中向查询中添加Where
子句来添加过滤条件。
var pk = "abc";
var filterPk = TableQuery.GenerateFilterCondition(
nameof(ServiceAlertsEntity.PartitionKey),
QueryComparisons.Equal, pk);
var query = new TableQuery<ServiceAlertsEntity>().Where(filterPk);
table.ExecuteQuery返回一个IEnumerable,这意味着它会在多个分区服务器将所有数据。这种方法不好 –