Azure移动服务-通过自定义参数传递数组
本文关键字:自定义 参数传递 数组 -通 移动 服务 Azure | 更新日期: 2023-09-27 18:17:10
我正在使用Azure移动服务与c#客户端。我有一个"分数"表,每个分数都有一个Facebook Id。我需要做的是传入一个用户的好友数组,并返回好友列表中的所有分数。
所以我在客户端尝试了这个:
return _client.GetTable<Score>().WithParameters(new Dictionary<string, string>
{
{ "Level", level.ToString() },
//aggregate our string[] to a comma-delimited string
{ "Friends", friends.Aggregate(new StringBuilder(), (b, s) => b.Append(s).Append(',')).ToString() }
}).ToListAsync();
这是奇怪的,我只有在自定义参数传入字符串的选项。
所以我在服务器的read中这样做:
function read(query, user, request) {
query.where({ Level: request.parameters.Level, UserId: request.parameters.Friends.split(',') });
request.execute();
}
逗号分隔的列表似乎不起作用。我在服务器上得到这个错误:
Error in script '/table/Score.read.js'. Error: Unsupported literal value chucknorris,bobloblaw,
注意:我通过了chucknorris
和bobloblaw
作为Facebook id进行测试。
是否有其他方法可以使这个工作?如果我去掉字符串分隔的东西,"Level"值过滤得很好。
您对mssql
对象的使用肯定有效,但您也可以在query.where
调用中使用函数,该函数返回您想要的条件:
function read(query, user, request) {
query.where(function(level, userIds) {
return this.Level === level && this.UserId in userIds;
}, request.parameters.Level, request.parameters.Friends.split(','));
request.execute();
}
注意,这个函数中的in
操作符的行为与JavaScript中的in
操作符并不完全相同。相反,它恰好用于具有相等语句的"或"分组,您正在"手工"创建以传递给SQL对象。
让它与服务器端脚本一起工作:
function read(query, user, request) {
var innerSql = '';
var friends = request.parameters.Friends.split(',');
var parameters = new Array(friends.length + 1);
parameters[0] = request.parameters.Level;
for (var i = 0; i < friends.length; i++) {
if (i !== 0) {
innerSql += ' or ';
}
innerSql += 'UserId = ?';
parameters[i + 1] = friends[i];
}
mssql.query('select * from Score where Level=? and (' + innerSql + ')', parameters, {
success: function (results) {
request.respond(statusCodes.OK, results);
}
});
}
如果有人有更清晰的解决方案,我会把这个答案保留几天。