问题描述
如何查询已报告的双胞胎,该双胞胎是字符串数组 例如:
"SupportedCommands": [
"firmwareUpdate","diagnostics","getLog","calculateHash"
]
我检查了一些命令,例如
WHERE CONTAINS(array,string)
或
WHERE [string] IN [array]
但没有人工作
解决方法
查询双胞胎和工作时,唯一受支持的功能是:
IS_DEFINED(属性)
查看更多详细信息here。
由于可以在两个步骤中使用一种解决方法来进行查询,因此第一个步骤(例如IoT Hub服务端进行的预查询过程)将根据属性的值返回所有双胞胎,请参阅以下示例:
SELECT
deviceId,properties.reported.SupportedCommands
FROM devices
WHERE properties.reported.SupportedCommands NIN [ null,[],['abc','123'] ]
第二步将在客户端使用LINQ语句,请参见以下示例:
var dummy = new { SupportedCommands = new string[] { } };
var query2 = (await query1.GetNextAsJsonAsync()).Where(i => JsonConvert.DeserializeAnonymousType(i,dummy).SupportedCommands.Contains("getLog"));
,
我是这样解决的:
SELECT * FROM devices
WHERE ARRAY_CONTAINS(tags.SupportedCommands,'firmwareUpdate')
希望对你有用。