5

Bir windows mağazası javascript uygulamasında çalışıyorum. Uygulama masmavi mobil servislerden veri kullanır.Azure veritabanından satır sayısı nasıl alınır?

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

kod tüm tabloyu item getirir ve değişken itemTable kaydeder: aşağıdaki kodu düşünün.

itemTable içinde bulunan satırların hiçbir kodu hangi kodu döndürecek?

cevap

5

Ne aradığınız tablo/sorgu nesne üzerinde includeTotalCount yöntemdir (maalesef belgelerinden eksik diye onu tamir için ürün ekibine hata bildiriminde gerekir).

Sorgu nesnesinde read numaralı telefonu aradığınızda, çok eskiden tüm öğelerin çok büyük bir tabloda döndürülmesini engellemek için varsayılan olarak 50 (IIRC, sayı farklı olabilir) öğelerinden dönecektir. ayrılan servisler için giden bant genişliği maliyeti veya ücretsiz olanlar için kotaya girmek). Böylece, tablodaki tüm öğeleri almak ve sonuçların uzunluğunu almak doğru olmayabilir.

İstediğiniz, tablodaki öğe sayısıysa, aşağıdaki kodu kullanabilirsiniz: sıfır öğelerini ve toplam sayısı döndürür.

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

ayrıca bazı unsurları sorgulamak istiyorum ve varsa

sadece ayrıca includeTotalCount yanı uygun take() ve skip() çağrıları ekleyin ve toplam sayısı (yani çağrı için) içerir.

+1

Teşekkür ederim carlosfigueira! İşe yaradı :). Azure tarafında bu işlemi yapmak ve istemci uygulaması yalnız satır sayısı sonucu döndürmek? –

+0

Basit bir 'Query' yöntemi' .count() 'sağlamak için tam olarak bunu yapmak harika olurdu ... gibi bir şey ... .getTable ('tableName')., read() 'yerine count()' skaler sonucu elde etmek için; – SliverNinja

+1

İyi fikir, ürün ekibiyle bir öneride bulunacak. – carlosfigueira

2

table query üzerinde read() kodunu çalıştırmanız ve sonuçların length sürümünü almanız gerekir. Yalnızca bir kayıt sayımını değil, tüm sonuçlar alınmaya başlandı Eğer

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

- sadece iletilen veri miktarını azaltmak için kimlik sütunu seçmelidir. Bu ihtiyacı karşılamak için JS Query API'da henüz count() yöntemini göremiyorum.

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

Bu kod aslında çalışmaz. Ağ isteği tamamlandıktan sonra 'o zaman' fonksiyonuna geçirilen fonksiyon parametresi eşzamansız olarak yürütülür. Bu, "var numItems = items.length" satırının bundan önce çalıştırılacağı ve bu noktada 'item'lerin undefined olacağı anlamına gelir. – carlosfigueira

+0

Cevabınız için teşekkür ederiz SilverNinja! Ancak yukarıda verilen kodda "öğeler", buna "sonuç" atandıktan sonra hala tanımsızdır. tanımsız veya null başvuru malı 'uzunluğunu' alınamıyor: –

+0

eğer kontrol etmeyi deneyin (Not: My Azure DB boş değil) Ve dolayısıyla "uzunluğunu" ekleyerek için "ürün" JavaScript çalışma zamanı hatası şu hatayı attı read() 'işlemi sırasında bir hata alıyorum. "FailFilter" ... '.then (function (results) {...} işlevi için [' then() '] (http://api.jquery.com/deferred.then/) dosyasına başka bir parametre ekleyin.() {alert ("$. okuma başarısız!"");)' – SliverNinja

4

herkes sadece (benim gibi) C# üzerinde TOTALCOUNT nasıl burada ve ilgi gelirse, o zaman bu bunu nasıl olduğunu:

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

Kredi Bu blog yazısı gider here

İlgili konular