5

我正在开一个windows store的javascript应用程序。该应用程序使用来自Azure移动服务的数据。 考虑下面的代码:如何从蔚蓝数据库中获取行数?

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

该代码读取整个表item并将其保存到一个变量itemTable

什么代码会返回itemTable中存在的行号?

回答

5

什么你要找的是表/查询对象的includeTotalCount方法(遗憾的是它是一个从文档丢失,我将提交错误的产品团队有它固定的)。

当您在查询对象上调用read时,它将默认返回50个(IIRC,数字可能不相同)元素,以防止天真的调用返回非常大的表中的所有元素(从而导致预留服务的出站带宽成本,或免费配额的配额)。因此,获取表格中的所有元素,并获得结果的长度可能不准确。

如果你想要的是表中元素的数量,你可以使用下面的代码:返回元素和总数。

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

如果您想查询一些元素,并且还包括总计数(即寻呼),只需添加相应take()skip()电话,也是includeTotalCount为好。

+1

谢谢carlosfigueira!它工作:)。有没有办法在azure方面执行这个过程,并将行计数结果单独返回给客户端应用程序? – 2013-03-25 15:20:55

+0

如果提供一个简单的'Query'方法'.count()'就可以了。 .getTable('tableName')。count()'而不是'read()'得到标量结果; – SliverNinja 2013-03-25 16:17:30

+1

好主意,会向产品团队提出建议。 – carlosfigueira 2013-03-25 18:37:20

2

您需要对table query执行read(),然后获得结果的length

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

如果您只显示记录数而不是整个结果 - 您应该选择ID列以减少传输的数据量。我没有在JS Query API中看到count()方法可用,以满足此需求。

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

这代码实际上不起作用。传递给'then'函数的函数参数将在网络请求完成后异步执行。这意味着'var numItems = items.length'行会在这之前被执行,并且'items'在那个时候将不被定义。 – carlosfigueira 2013-03-25 14:51:12

+0

谢谢你的回复SilverNinja!但是在上面给出的代码中,“items”在为其分配“结果”之后仍未定义。因此,将“length”附加到“items”弹出以下错误 JavaScript运行时错误:无法获取未定义或空引用的属性“长度” (注意:我的Azure DB不为空) – 2013-03-25 14:51:31

+0

尝试检查您是否在'read()'操作中返回一个错误。为''failFilter''添加另一个参数['then()'](http://api.jquery.com/deferred.then/)... .then(function(results){...},function (){alert(“$。read failed!“);)' – SliverNinja 2013-03-25 14:58:06

4

如果有人来到这里和感兴趣的是如何得到TOTALCOUNT只在C#(像我一样),那么这就是你如何做到这一点:

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

幸得这篇博客here