public IActionResult GetDevicesTwinIds([FromBody] DeviceQueryRuleGroup where) { try { logger.LogInformation("Get DeviceTwin Ids Properties called"); IEnumerable <string> response = _deviceServiceDB.GetDevicesTwinIds(where); return(Ok(response)); } catch (Exception e) { logger.LogError(e, "Get DeviceTwin Ids Properties- Exception {message}", e.Message); throw; } }
public IEnumerable <string> GetDevicesTwinIds(DeviceQueryRuleGroup where) { DevicesDBCache deviceDB = _Cache.DevicesDB; if (!deviceDB.IsDevicesDBCacheInitialized) { return(new List <string>()); } try { //Get cached devices IEnumerable <DeviceTwinFlatModel> devices = deviceDB.Devices.Values; return(InMemoryLinqDeviceQueryHelper.GetFilteredDevicesIds(devices, where)); } catch (Exception e) { Log.Error("Get IoTHub Devices Twin Ids error {@error}", e.Message); return(new List <string>()); } }
private static Func <DeviceTwinFlatModel, bool> GetFilteredDevicesOr(IEnumerable <DeviceTwinFlatModel> devices, DeviceQueryRuleGroup filterGroup) { var predicate = PredicateBuilder.False <DeviceTwinFlatModel>(); if (filterGroup != null) { //First, dealing with groups foreach (var subFilterGroup in filterGroup.Groups) { if (subFilterGroup == null || (subFilterGroup.Rules.Count == 0 && subFilterGroup.Groups.Count == 0)) { continue; } if (subFilterGroup.Operator == LogicalOperators.And) { predicate = predicate.Or(GetFilteredDevicesAnd(devices, subFilterGroup)); } else { predicate = predicate.Or(GetFilteredDevicesOr(devices, subFilterGroup)); } } foreach (DeviceQueryRule rule in filterGroup.Rules) { if (rule != null) { predicate = predicate.Or(GetFilteredDevices(devices, rule)); } } } return(predicate); }
public static IEnumerable <string> GetFilteredDevicesIds(IEnumerable <DeviceTwinFlatModel> devices, DeviceQueryRuleGroup filterGroup) { _StringFields = InMemoryLambdaExpressionsHelper.FieldsStringLambdas; _IntegerFields = InMemoryLambdaExpressionsHelper.FieldsIntegerLambdas; _DoubleFields = InMemoryLambdaExpressionsHelper.FieldsDoubleLambdas; _DateFields = InMemoryLambdaExpressionsHelper.FieldsDateLambdas; _BoolFields = InMemoryLambdaExpressionsHelper.FieldsBoolLambdas; if (filterGroup.Operator == LogicalOperators.And) { return(devices.Where(GetFilteredDevicesAnd(devices, filterGroup)).Select(p => p.DeviceId)); } return(devices.Where(GetFilteredDevicesOr(devices, filterGroup)).Select(p => p.DeviceId)); }