如何用let作为方法返回一个疤痕

时间:2017-05-09 00:14:41

标签: azure azure-application-insights

我试图比较一个数组是否是其他的子集并在另一个查询中使用它。我可以让比较方法起作用。但是,如果我在另一个查询中使用compare方法,我会收到错误说"关系运算符的左侧和右侧必须是标量"这暗示了比较阵列不是对标量进行重新定标。有什么想法吗?

let x = parsejson('["a", "b", "c"]');
let y = parsejson('["a", "b", "c"]');
let z = parsejson('["b","a"]');
let comparearrays =  (arr1:dynamic, arr2:dynamic)
{
let arr1Length = arraylength(arr1);
let total =   
range s from 0 to arr1Length-1 step 1    
| project dat = iff(arr1[s] in (arr2), true , false)
| where dat == true 
| count;
total | extend isEqual= iff(Count == arr1Length,'true','false') | project 
tostring(isEqual)

};
//comparearrays(z, x)

datatable (i:int) [4] | project i | where comparearrays(x,y) == 'true'

1 个答案:

答案 0 :(得分:0)

你的理解是正确的 - 当前的实现返回一个包含单行和单列的表,但不必担心 - toscalar拯救:

let x = parsejson('["a", "b", "c"]');
let y = parsejson('["a", "b", "c"]');
let z = parsejson('["b","a"]');
let comparearrays =  (arr1:dynamic, arr2:dynamic)
{
    let arr1Length = arraylength(arr1);
    let result  =   
        range s from 0 to arr1Length-1 step 1    
        | project dat = iff(arr1[s] in (arr2), true , false)
        | where dat == true 
        | count 
        | extend isEqual = iff(Count == arr1Length,'true','false') 
        | project tostring(isEqual);
    toscalar(result)
};
//comparearrays(z, x)
datatable (i:int) [4] | project i | where comparearrays(x,y) == 'true'

comparearrays函数确实存在错误,因为comparearrays(z, x)返回true,这是不正确的....