5

Ich arbeite an einem Windows-Store Javascript-Anwendung. Die Anwendung verwendet Daten von azure Mobildienste. Betrachten Sie den folgenden Code:Wie bekomme ich die Zeilenanzahl von einer azurblauen Datenbank?

var itemTable = mobileService.getTable('item'); 
//item is the table name stored in the azure database 

Der Code die gesamte Tabelle holt item und speichert sie in einer Variablen itemTable.

Welcher Code gibt die Anzahl der Zeilen zurück, die in itemTable ??

Antwort

5

Was Sie suchen ist die includeTotalCount Methode auf dem Tisch/Abfrageobjekt (leider ist es aus der Dokumentation fehlt, werde ich einen Fehler an das Produktteam Datei, die es zu haben, festgelegt).

Wenn Sie read für das Abfrageobjekt aufrufen, gibt es standardmäßig 50 (IIRC, die Anzahl kann anders sein) Elemente zurück, um zu verhindern, dass ein naiver Aufruf alle Elemente in einer sehr großen Tabelle zurückgibt die ausgehenden Bandbreitenkosten für reservierte Dienste oder das Erreichen des Kontingents für freie Dienste). Es ist daher möglicherweise nicht korrekt, alle Elemente in der Tabelle zu erfassen und die Länge der Ergebnisse zu ermitteln.

Wenn Sie nur die Anzahl der Elemente in der Tabelle möchten, können Sie den folgenden Code verwenden: Zurückgeben Null Elemente und die Gesamtzahl.

var table = client.getTable('tableName'); 
    table.take(0).includeTotalCount().read().then(function (results) { 
     var count = results.totalCount; 
     new Windows.UI.Popups.MessageDialog('Total count: ' + count).showAsync(); 
    }); 

Wenn Sie einige Elemente abfragen möchten, und auch die Gesamtzahl (das heißt, für Paging), fügen Sie einfach die entsprechenden take() und skip() Anrufe, und die auch als auch includeTotalCount.

+1

Danke carlosfigueira! Es hat funktioniert :). Und gibt es einen Weg zu Führen Sie diesen Prozess auf der azurblauen Seite aus und geben Sie das Zeilenzählergebnis allein an die Client-App zurück? –

+0

Es wäre großartig, eine einfache 'Query'-Methode' .count() 'bereitzustellen, die genau das getan hat .getTable ('tabellenname'). count() 'anstelle von' read() ' um das Skalarergebnis zu erhalten; – SliverNinja

+1

Gute Idee, wird einen Vorschlag mit dem Produktteam einreichen. – carlosfigueira

2

Sie müssen read() über die table query ausführen und dann die length der Ergebnisse erhalten.

var items, numItems; 
itemTable.read().then(function(results) { items = results; numItems = items.length; }); 

Wenn Sie nur eine Datenanzahl zeigen und nicht die gesamten Ergebnisse - Sie sollten nur die ID-Spalte wählen übertragen, um die Datenmenge zu reduzieren. Ich sehe keine count() Methode, die noch im JS Query API verfügbar ist, um diesen Bedarf zu füllen.

var itemTable = mobileService.getTable('item').select('itemID'); 
+0

Diese Code wird tatsächlich nicht funktionieren. Der an die Funktion 'then' übergebene Funktionsparameter wird asynchron ausgeführt, sobald die Netzwerkanforderung abgeschlossen ist. Das bedeutet, dass die Zeile 'var numItems = items.length' davor ausgeführt wird und' items' an dieser Stelle nicht definiert ist. – carlosfigueira

+0

Vielen Dank für Ihre Antwort SilverNinja! Aber in dem oben angegebenen Code ist "Items" nach der Zuweisung von "Resultaten" immer noch undefiniert. Und daher anhängt „Länge“ auf „Elemente“ tauchte die folgende Fehler JavaScript-Laufzeitfehler: Kann nicht Eigenschaft ‚Länge‘ von undefined oder null Verweis erhalten (Hinweis: My Azure DB nicht leer ist) –

+0

Versuchen Sie überprüfen, ob Sie während der 'read() 'Operation einen Fehler zurückbekommen. Fügen Sie einen weiteren Parameter zu ['then()'] (http://api.jquery.com/deferred.then/) für die Funktion 'failFilter' ...' .then (function (results) {...}, hinzu() {alert ("$ .lesen fehlgeschlagen!");)' – SliverNinja

4

Wenn jemand hier und interessiert sich kommt, wie die totalcount bekommen nur auf C# (wie ich), dann ist dies, wie Sie es tun:

var table = MobileService.GetTable<T>(); 
var query = table.Take(0).IncludeTotalCount(); 
IList<T> results = await query.ToListAsync(); 
long count = ((ITotalCountProvider)results).TotalCount; 

Kredit geht zu diesem Blog-Eintrag here

Verwandte Themen