[英]Azure Mobile Services - Passing arrays through Custom Parameters
我正在使用Azure Mobile Services和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();
這很奇怪我只能為自定義參數傳遞字符串。
所以我在服務器的讀取上做了這個:
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 ids進行測試。
有沒有其他方法可以使這項工作? 如果我取出字符串分隔的東西,“Level”值過濾就好了。
得到它使用此服務器端腳本:
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);
}
});
}
如果有人有更清潔的解決方案,我會保持這個答案開放幾天。
您對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
這個函數操作者不表現得很完全像in
運營商中的JavaScript。 相反,它完全用於具有“或”組的相等語句,您正在“手動”創建它以傳遞給SQL對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.