2017-09-04 2 views
2

J'utilise ce code et pourrait obtenir le résultat mais ne pense pas que cela est une bonne façoncomment lister les 100 blobs de stockage blob d'azur en utilisant C#

CloudBlobDirectory blobDirectory = 
container.GetDirectoryReference(blobDirectoryReference); 

IEnumerable<IListBlobItem> blobList = 
blobDirectory.ListBlobs(useFlatBlobListing:true, 
blobListingDetails:BlobListingDetails.Metadata) 
.OfType<CloudBlockBlob>() 
.OrderByDescending(m=>m.Properties.LastModified).Take(100); 
+0

Si ce code fonctionne, quelle est votre question? – stuartd

+0

Je veux récupérer les 100 premières lignes, mais je pense que ce code récupère toutes les lignes et sélectionne 100. – Shantanu

+1

Le code récupère toutes les lignes, les triant, puis en prenant 100 en fonction de votre ordre de tri. Le tri est-il requis pour votre scénario? Ce n'est pas clair à partir de la question. Si vous voulez juste le top 100 dans l'ordre lexicographique, vous pouvez supprimer l'appel 'OrderByDescending'. Ensuite, la liste ne récupérera que suffisamment de pages pour obtenir les 100 premières lignes. –

Répondre

2

C'est exact, il ne reçoit pas la partie supérieure 100 côté serveur. Pour cela, vous avez besoin de la méthode ListBlobsSegmented.

À sa plus simple, il peut ressembler à ceci:

IEnumerable<IListBlobItem> blobList = container.ListBlobsSegmented(string.Empty, true, 
    BlobListingDetails.Metadata, 100, null, null, null).Results 
    .OfType<CloudBlockBlob>() 
    .OrderByDescending(m => m.Properties.LastModified); 

Vous pouvez diviser la requête en chuncks plus petits, puis utiliser un BlobContinuationToken itérer sur les morceaux. Regardez la documentation que j'ai fournie dans ce post pour toutes les options.

Pensez toutefois qu'il n'est pas possible de trier les résultats côté serveur. Il va seulement trier le morceau que vous récupérez et le côté client seulement.

+1

Peter a raison. S'il vous plaît noter qu'il n'y a aucun moyen de lister les blobs dans l'ordre de LastModified date du côté du serveur. –

+1

Ce n'est pas une solution complète pour deux raisons. D'abord, il obtient et trie seulement la première page des résultats. D'autres résultats qui viennent plus tôt dans l'ordre de tri peuvent exister. Deuxièmement, il n'y a aucune garantie que 'ListBlobsSegmented' renverra 100 résultats. Vous avez besoin d'une boucle pour obtenir plus de résultats dans le cas où le premier appel n'a pas retourné assez. –

+0

@ MichaelRoberson-MSFT c'est pourquoi j'ai déclaré que cet exemple de code est le strict minimum et que vous devez utiliser le jeton pour itérer, éditera la réponse pour rendre ik plus clair sur le tri. BTW, s'il y a moins de 100 éléments sur le serveur avez-vous encore besoin de faire une boucle? Je ne pensais pas mais je pourrais me tromper ... –