2016-08-03 18 views
7

Mit diesem CodeblockErhalten Sie alle Datensätze aus azurTabellenSpeicher

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

Ich kann den einzelnen Datensatz mit der Trennwand und RowKey in der abrufen erwähnt abzurufen.

Gibt es eine Möglichkeit, alle Datensätze, die in der Partition von ServiceAlerts gespeichert sind, zu erhalten?

Ich habe eine Wildcard (*) für den zweiten Parameter versucht

TableOperation retrieveOperation = TableOperation.Retrieve<ServiceAlertsEntity>(
     "ServiceAlerts","b9ccd839-dd99-4358-b90f-46781b87f933"); 

aber es gibt nichts zurück.

Antwort

4

Sie müssen eine TableQuery angeben, dies gibt Ihnen alle Entitäten oder Sie können TableQuery.GenerateFilterCondition angeben, um die Zeilen zu filtern.

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 gibt eine IEnumerable was bedeutet es, alle Daten über mehrere Partitionsserver bringen wird. Dieser Ansatz ist nicht gut –

1

Sie verwenden falsche Klasse. Verwenden Sie TableQuery, um mehrere Ergebnisse abzurufen.

0

Wenn Sie weitere Kontrolle über die zurückgegebenen Datensätze benötigen werden, können Sie ExecuteQuerySegmentedAsync verwenden, um Daten eine Seite abgerufen werden (rund 1.000 Datensätze) zu einem Zeitpunkt.

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

Oder wenn Sie Ihre Ergebnisse einschränken müssen, z. Nach Partitionsschlüssel können Sie eine Filterbedingung hinzufügen, indem Sie der Abfrage im obigen Code eine Where-Klausel hinzufügen.

var pk = "abc"; 
    var filterPk = TableQuery.GenerateFilterCondition(
     nameof(ServiceAlertsEntity.PartitionKey), 
     QueryComparisons.Equal, pk); 

    var query = new TableQuery<ServiceAlertsEntity>().Where(filterPk); 

MS Azure reference