我正在尝试执行一个' doesNotContainAllObjectsInArray'在Azure移动服务上键入操作。例如,我们假设我有一个名为Number
的表格,并且在该表格中包含这些'数字'值:11111,22222,333333,44444。
我希望能够编写一个查询,允许我传入一些我特别不想要的数字,例如:[11111,44444]
应该让我[22222, 33333]
。
我已尝试在我的where
运算符中使用JavaScript,但我收到错误,指出表达式不受支持。这就是我尝试过的:
var numberTable = tables.getTable('Number');
var ignoreNumbers = ['11111', '44444'];
numberTable.where(function(numbers) {
return (numbers.indexOf(this.number) > -1);
}, ignoreNumbers).read({
success: function(foundNumbers) {
console.log('Found ' + foundNumbers.length + ' numbers!');
},
error: function(error) {
console.error('Error with query! ' + error);
}
});
注意:我无法对ignoreNumbers值进行硬编码,因为该数组是从先前的查询生成的。
有人可以推荐我如何执行这样的查询吗?我是否需要构建SQL语句并使用mssql
执行它? (...甚至可以使用表存储吗?)
答案 0 :(得分:1)
您正在描述Table Queries中不支持的SQL Except运算符。我发现这样做的唯一方法是将表加载到内存中(由于大小通常不可行),然后使用LINQ进行Except查询。
答案 1 :(得分:0)
我设法通过创建一个SQL查询并通过request.service.mssql
对象执行它来解决这个问题,如下所示:
SELECT * FROM Number WHERE (number != '11111' && number != '22222')
查询的WHERE部分是通过迭代ignoreNumbers
数组并通过字符串连接构建SQL语句来构建的。
不确定它是否是世界上效率最高的东西,但实际上只有几个数字(可能是5-10个),到目前为止似乎有用。