2016-08-03 3 views
7

Используя этот блок кодаПолучить все записи из хранилища лазури таблицы

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"); 

но ничего не возвращает.

ответ

4

Необходимо указать 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); 
} 
+0

table.ExecuteQuery возвращает IEnumerable, который означает, что он принесет все данные по нескольким сервера раздела. Этот подход не является хорошим –

0

Если вам нужен дополнительный контроль над записями возвращаются, вы можете использовать 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); 

MS Azure reference

Смежные вопросы