TableQuery<T> à partir d'Azure TableStorage que des filtres sur PartitionKey
Je suis en train de résumé geting toutes les entités à partir d'une Table par partitionKey, comme suit:
public List<T> GetEntities<T>(string partitionKey, T entity) where T : TableEntity
{
try
{
var tableClient = _account.CreateCloudTableClient();
var table = tableClient.GetTableReference(entity.GetType().Name.ToLower());
var exQuery =
new TableQuery<T>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal,
partitionKey));
var results = table.ExecuteQuery(exQuery).Select(ent => (T) ent).ToList();
return results;
}
catch (StorageException ex)
{
//TODO: Add more trace info
Trace.TraceInformation("Unable to retrieve entity based on query specs");
return null;
}
}
Cependant, Il est défaillante sur le
new TableQuery<T>
parce que le TElement ne pas avoir un constructeur sans paramètre.
OriginalL'auteur Joey Schluchter | 2012-11-20
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez également mentionné dans votre question, T doit avoir un constructeur sans paramètre. Donc, s'il vous plaît changer la définition de votre méthode comme suit:
OriginalL'auteur Serdar Ozler
J'ai écrit un petit générique de dépôt pour le stockage de table :
OriginalL'auteur Rahul Garg
En plus de @serdar-ozler-réponse de microsoft, vous n'avez même pas besoin de convertir et à lancer les entités de retour.
La CloudTable.ExecuteQuery méthode a une surcharge qui accepte un type générique:
Vous pouvez également utiliser Linq pour filtre sur la Table de Service.
De sorte que vous pouvez réécrire votre méthode comme ça :
OriginalL'auteur Thomas