2017-05-03 58 views
0

在后端使用Azure移动服务和Azure简易表我希望在客户端上获得过滤的数据,因为表可能相当大,但有用的行对具有自己的ID的特定用户不会。我试图使用Azure移动服务PullAsync并非所有数据

IMobileServiceTableQuery<Messages> query = 
    msgTable.Where(c => c.UserId==_myId); 

await msgTable.PullAsync("syncmsg"+_myid, query); 

但事实证明,PullAsync应用查询只在下次,但第一次它拉取所有数据。有没有办法使用Azure移动服务在本地存储上拉取和存储,只在查询数据上过滤?

回答

2

因此,首先要做的是 - 您应该在服务器上进行安全过滤,而不是客户端。根据您的规格,可以通过简单的方法来调整服务器上的过滤器。请参阅https://github.com/Azure/azure-mobile-apps-node/tree/master/samples了解大量样本。

至于这个问题,你正在构建错误的查询。你想要的东西是:

var query = msgTable.CreateQuery().Where(c => c.UserId == myId); 
await msgTable.PullAsync('mysyncquery', query); 

请注意中间的CreateQuery()。没有这个,你不会设置基本查询。

+0

感谢您的纠正。但它仍然返回所有行。所以唯一的办法是在服务器端编写过滤器,我无法通过所有过滤器从客户端传递查询? –

+0

查看正在传递给后端的查询。它应该包括$ filter =(userId eq'something') - 这应该起作用,我的测试表明正确的事情发生。 –

+0

非常感谢,它的工作原理!不幸的是,我不能说其他人可能会遇到什么问题,但现在开始工作了! –