2017-09-04 2 views
2

Ich verwende diesen Code notieren und das Ergebnis bekommen könnte, aber glaube nicht, dies eine richtige Art und Weisewie Top-100-Blobs von Azure Blob Storage mit 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

Wenn dieser Code funktioniert, was ist Ihre Frage? – stuartd

+0

Ich möchte die obersten 100 Zeilen abrufen, aber ich denke, dass dieser Code alle Zeilen abruft und 100 auswählt. – Shantanu

+1

Ihr Code erhält alle Zeilen, sortiert sie und nimmt dann 100 basierend auf Ihrer Sortierreihenfolge. Ist für Ihr Szenario eine Sortierung erforderlich? Dies ist nicht klar aus der Frage. Wenn Sie nur die Top 100 in lexikographischer Reihenfolge möchten, können Sie den Aufruf 'OrderByDescending' entfernen. Dann werden in der Liste nur so viele Seiten abgerufen, dass die ersten 100 Zeilen abgerufen werden können. –

Antwort

2

Das ist richtig, es ist nicht die Spitze bekommt 100 Serverseite. Dazu benötigen Sie die Methode ListBlobsSegmented.

Auf sie es so aussehen einfachsten kann:

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

Sie die Abfrage in kleineren chuncks geteilt und dann eine BlobContinuationToken verwenden, um über den Brocken iterieren. Sehen Sie sich die Dokumentation an, die ich in diesem Beitrag für alle Optionen zur Verfügung gestellt habe.

Beachten Sie jedoch, dass es nicht möglich ist, die Ergebnisse serverseitig zu sortieren. Es sortiert nur den Chunk, den Sie abrufen, und nur die Clientseite.

+1

Peter hat Recht. Beachten Sie, dass es keine Möglichkeit gibt, Blobs in der Reihenfolge des LastModified-Datums serverseitig aufzulisten. –

+1

Dies ist aus zwei Gründen keine vollständige Lösung. Zuerst wird nur die erste Seite mit Ergebnissen sortiert und sortiert. Andere Ergebnisse, die in der Sortierreihenfolge früher kommen, können vorhanden sein. Zweitens gibt es keine Garantie, dass "ListBlobsSegmented" 100 Ergebnisse zurückgibt. Sie benötigen eine Schleife, um mehr Ergebnisse zu erhalten, falls der erste Aufruf nicht ausreichend war. –

+0

@ MichaelRoberson-MSFT deshalb habe ich festgestellt, dass dieses Codebeispiel das absolute Minimum ist und dass Sie das Token verwenden müssen, um zu iterieren, wird die Antwort bearbeiten, um ik klarer über die Sortierung zu machen. Übrigens, wenn es weniger als 100 Elemente auf dem Server gibt, müssen Sie noch eine Schleife machen? Ich dachte nicht, aber ich könnte falsch liegen ... –

Verwandte Themen