有没有办法在Azure MobileServiceSyncTable中执行Count Query?

时间:2017-03-14 16:33:43

标签: java android azure mobile

我正在开发一个使用Azure Mobile Apps进行离线同步的应用程序(Android),并且我试图获取有关如何向MobileServiceSyncTable创建查询的任何信息(即查询到本地sqlite数据库)。很高兴看到SQL查询和Azure ORM等价,例如:

SELECT ... FROM ... WHERE id = "1" : Query query = QueryOperations.field("id").eq(val("1"));
SELECT ... FROM ... WHERE id <> "1" : Query query = QueryOperations.field("id").ne(val("1"));
SELECT COUNT("id") FROM ...  - ???
SELECT ... FROM ... ORDER BY ... DESC - ???

等等。我已经检查了教程和文档,但是教程只显示了简单的用例。如果使用MobileServiceTable(没有脱机同步),语法就像LINQ。但是在使用MobileServiceSyncTable的情况下,语法并不明显。 是否有人使用MS Azure Mobile后端创建了具有脱机同步功能的移动应用程序?

2 个答案:

答案 0 :(得分:0)

我查看了源代码&amp;用于Android客户端的Azure移动应用SDK的javadocs,然后我发现类MobileServiceSyncTableQueryOperations&amp;中没有任何方法。 Query用于直接支持某些功能,如计数行,排序等。

如果要在检索数据时获取计数,可以使用类includeInlineCount()的方法Query将inlinecount属性添加到结果中。

否则,似乎有一种计算行或其他查询的解决方法,它来自Android客户端的source code单元测试,它直接在Android上为SQLite构建sql查询以获取数据您想要,因为脱机同步功能用于在SQlite和Azure移动应用之间进行同步。

希望它有所帮助。

根据我的经验,下面的解决方法可以计算行数。

  1. 使用自定义api和后端逻辑进行计数。
  2. 使用includeInlineCount方法对大尺寸表进行分页。

答案 1 :(得分:0)

我找到了创建有序查询的方法: 在使用WHERE子句进行查询的情况下:

SELECT * FROM <TableName> WHERE <field1>=<value> ORDER BY <field2> DESC :
QueryOperations.field("field1").eq(val("value")).orderBy("<field2>", QueryOrder.Descending);

如果是简单的有序查询(获取所有行):

SELECT * FROM <TableName> ORDER BY <fieldName> DESC :
QueryOperations.field("id").ne(val("")).orderBy("<fieldName>", QueryOrder.Descending);

它很脏,但它有效。构建查询在this tutorial中描述。虽然它是关于MobileServiceTable(没有脱机同步),但语法类似。

但关于COUNT的问题仍未解决。