5

Sto lavorando su un'applicazione javascript di Windows Store. L'applicazione utilizza i dati dei servizi mobili blu. Si consideri il codice qui sotto:Come ottenere il conteggio delle righe da un database azzurro?

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

Il codice recupera l'intera tabella item e lo salva in una variabile itemTable.

Quale codice restituirà il numero di righe presenti in itemTable ??

risposta

5

Quello che stai cercando è il metodo includeTotalCount sull'oggetto Tabella/query (purtroppo che manca dalla documentazione, farò un bug al team di prodotto per avere la fissa).

Quando si chiama read sull'oggetto query, verrà restituito per impostazione predefinita 50 (IIRC, il numero potrebbe essere diverso) elementi da esso, per impedire a una chiamata ingenua di restituire tutti gli elementi in una tabella molto grande (in tal modo o incorrere il costo della larghezza di banda in uscita per i servizi riservati o il raggiungimento della quota per quelli gratuiti). Quindi ottenere tutti gli elementi nella tabella e ottenere la lunghezza dei risultati potrebbe non essere accurato.

Se tutto ciò che si desidera è il numero di elementi nella tabella, è possibile utilizzare il codice riportato di seguito: restituzione zero elementi e il conteggio totale.

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(); 
    }); 

Se si desidera richiedere alcuni elementi, e comprendono anche il conteggio totale (vale a dire, per il paging), basta aggiungere le opportune take() e skip() chiamate, e anche il includeTotalCount pure.

+1

Grazie carlosfigueira! Ha funzionato :). E c'è un modo per eseguire questo processo sul lato azzurro e restituire il risultato del conteggio delle righe solo all'app client? –

+0

Sarebbe bello fornire un semplice metodo 'Query'' .count() 'che ha fatto esattamente questo. Qualcosa come ...' client .getTable ('tableName'). count() 'invece di' read() ' per ottenere il risultato scalare; – SliverNinja

+1

Buona idea, presenterà un suggerimento con il team del prodotto. – carlosfigueira

2

È necessario eseguire read() su table query e quindi ottenere il length dei risultati.

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

Se si sta mostrando solo un numero di record e non l'intero risultato - si deve solo selezionare la colonna ID per ridurre la quantità di dati trasmessi. Non vedo ancora un metodo count() disponibile nel JS Query API per soddisfare questa esigenza.

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

Questo il codice in realtà non funzionerà. Il parametro della funzione passato alla funzione 'then' verrà eseguito in modo asincrono, una volta completata la richiesta di rete. Ciò significa che la riga 'var numItems = items.length' sarà eseguita prima di quella, e' items' non sarà definito in quel punto. – carlosfigueira

+0

Grazie per la risposta SilverNinja! Ma nel codice dato sopra "gli articoli" non sono ancora definiti dopo aver assegnato "risultati" ad esso. E quindi aggiungendo "lunghezza" a "elementi" spuntato il seguente errore Errore di runtime JavaScript: impossibile ottenere la 'lunghezza' della proprietà di riferimento non definito o nullo (Nota: Il mio DB di Azure non è vuoto) –

+0

Prova a verificare se sei ottenere un errore durante l'operazione 'read()'. Aggiungi un altro parametro a ['then()'] (http://api.jquery.com/deferred.then/) per 'failFilter' ...' .then (function (results) {...}, function() {avviso ("$. lettura fallita!");)' – SliverNinja

4

Se qualcuno viene qui e interessato a come ottenere il totalCount solo su C# (come me), allora questo è come lo fate:

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

merito va a questo post del blog here

Problemi correlati