如何使用 let 作为方法 return 一个标量

how to return a scarlar with let as method

我正在尝试比较一个数组是否是其他数组的子集并在另一个查询中使用它。我可以使比较方法起作用。但是,如果我在另一个查询中使用 compare 方法,我会收到一条错误消息 "Left and right side of the relational operator must be scalars" 这暗示 comparearrays 没有返回标量。有什么想法吗?

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'

您的理解是正确的 - 当前实施 returns 具有单行和单列的 table,但不要害怕 - 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) returns true 这是不正确的....