c# - 使用字符串方法查询Iothub设备孪生标签

标签 c# azure azure-iot-hub azure-iot-hub-device-management

我想获取以“测试”一词开头的设备列表。 或者类似的方法,获取tags.email 以“test”开头的所有设备。 我已经阅读了文档,但根据我的发现,它仅支持完全匹配的查询,并且还支持少数运算符,例如(>,<,!=,<>等..)。

有人可以帮我解决这个问题吗? 我想要一些查询,例如,

从设备中选择 * WHERE deviceId LIKE 'test%';

从设备中选择 * WHERE STARTS_WITH(tags.email, 'test')

最佳答案

doc详细描述了用于在 IoT 中心查询设备的类似 SQL 语句集。 IoT 中心当前不支持所请求的查询,但是您可以选择一些选项来满足您的要求:

  1. 为每个设备添加tags属性,例如:

    "tags": { "environment": "test" }
    

    并且根据tags.environment的值,您可以在IoT Hub端进行查询,例如:

    SELECT deviceId FROM devices  WHERE tags.environment IN ['test', 'dev']
    
    SELECT deviceId FROM devices  WHERE tags.environment NIN ['test']
    
  2. 此选项基于 IoT 中心的预查询​​设备,然后使用 LINQ 查询来获取最终查询结果,例如根据您的情况:

     SELECT deviceId, tags FROM devices
    

您还可以使用 WHERE 语句来最小化预查询步骤中的设备集。

获得此预查询结果后,您可以使用 LINQ 丰富语句根据 deviceId 和/或标签属性选择设备。

使用选项#2,可以使用以下示例:

SELECT deviceId, tags.email FROM devices WHERE is_defined(tags.email)

然后基于 LINQ,您可以在客户端完成查询。

关于c# - 使用字符串方法查询Iothub设备孪生标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63100670/

相关文章:

c# - 为单元格赋值时 DataGridView SLOW

c# - Azure AD 图形 API 组搜索

C# - EventHandler 始终为空

python - 使用 python Azure SDK 删除和创建 Azure VPN 网关

c# DataGrid BindingListCollectionView 自定义过滤器抛出聚合函数的无效用法意味着

javascript - NodeJS : Not able to access an image using ajax GET method. 但相同的 URL 在浏览器中加载图像没有任何问题

azure - 使用托管服务标识对 Azure Function 进行授权以从 Azure 存储容器获取 blob

arduino-uno - Arduino 以太网扩展板连接到 Azure IoT 中心

python - 在 Raspberry Pi 上使用 Azure-iothub-device-client 时出现问题

azure - 使用 Azure 流分析保留最后的值