查询Device Twin数组属性

问题描述

如何查询已报告的双胞胎,该双胞胎是字符串数组 例如:

"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')

希望对你有用。

Query on IoT Hub to find a device using properties list