Le tabelle di archiviazione di Azure dispongono tutte di una colonna timestamp. In base alla documentazione here, il modo in cui elencare per eliminare da una tabella di memoria è selezionare un'entità, quindi eliminarla.Come eliminare tutte le entità con un timestamp di oltre 1 giorno di età dalla tabella di archiviazione di Azure?
Qualcuno sa come eliminare qualsiasi entità da una tabella di memoria in base a un confronto con datetime sul valore di timestamp utilizzando il codice?
EDIT:
Sulla base del parere dato che ho scritto il seguente codice. Tuttavia, genera un'eccezione Richiesta non valida sulla mia chiamata table.ExecuteQuery (rangeQuery). Qualche consiglio?
StorageCredentials creds = new StorageCredentials(logAccountName, logAccountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
CloudTableClient client = account.CreateCloudTableClient();
CloudTable table = client.GetTableReference(LogTable);
TableQuery<CloudQuerySummary> rangeQuery = new TableQuery<CloudQuerySummary>()
.Where(TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.LessThan
, DateTime.Now.AddHours(- DateTime.Now.Hour).ToString()));
TableOperation deleteOperation;
// Loop through the results, displaying information about the entity.
foreach (CloudQuerySummary entity in table.ExecuteQuery(rangeQuery))
{
deleteOperation = TableOperation.Delete(entity);
table.Execute(deleteOperation);
}
EDIT 2
Ecco il codice finale di lavoro per tutti coloro che sceglie di copiare/fare riferimento a esso.
public void DeleteLogsNotFromToday()
{
StorageCredentials creds = new StorageCredentials(logAccountName, logAccountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
CloudTableClient client = account.CreateCloudTableClient();
CloudTable table = client.GetTableReference(LogTable);
TableQuery<CloudQuerySummary> rangeQuery = new TableQuery<CloudQuerySummary>()
.Where(TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThan
, DateTime.Now.AddHours(-DateTime.Now.Hour)));
try
{
TableOperation deleteOperation;
// Loop through the results, displaying information about the entity.
foreach (CloudQuerySummary entity in table.ExecuteQuery(rangeQuery))
{
deleteOperation = TableOperation.Delete(entity);
table.Execute(deleteOperation);
}
}
catch (Exception ex)
{
throw;
}
}
vedere la risposta modificata. –