Die Take-Methode auf dem Storage SDK funktioniert nicht wie in LINQ. Stellen Sie sich so etwas tun:
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
Wenn Sie über result
beginnen Iterieren Sie zunächst nur 5 Einzelteile erhalten werden. Aber darunter, wenn Sie weiter über die result
iterieren, wird das SDK weiterhin die Tabelle abfragen (und mit der nächsten "Seite" von 5 Elementen fortfahren).
Wenn ich 5000 Artikel in meinem Tisch haben, wird dieser Code-Ausgabe alle 5000 Punkte (und unter der SDK 1000 Anfragen tun und 5 Artikel pro Anfrage holen):
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
foreach (var item in result)
{
Trace.WriteLine(item.RowKey);
}
Der folgende Code holen genau 5 Artikel in 1 Anfrage und stoppen dort:
TableQuery<TableEntity> query = new TableQuery<TableEntity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"))
.Take(5);
var result = table.ExecuteQuery(query);
int index = 0;
foreach (var item in result)
{
Console.WriteLine(item.RowKey);
index++;
if (index == 5)
break;
}
Eigentlich ist die nehmen() Methode setzt die Seitengröße oder die "take count" (TakeCount Eigenschaft auf TableQuery). Aber es liegt immer noch an Ihnen, nicht mehr rechtzeitig zu iterieren, wenn Sie nur 5 Datensätze wünschen.
In Ihrem Beispiel sollen Sie die while-Schleife ändern zu stoppen, wenn die TakeCount erreichen (die Sie durch den Aufruf Nehmen eingestellt):
while (entryList.Count < query.TakeCount && (currentSegment == null || currentSegment.ContinuationToken != null))
{
currentSegment = table.ExecuteQuerySegmented(query, currentSegment != null ? currentSegment.ContinuationToken : null);
entryList.AddRange(currentSegment.Results);
}
Akzeptierte Antwort ist nicht korrekt - siehe @ Fabrizios Antwort. – Ryan