Фильтрация Cosmosdb по универсальному типу (объекту)
Привет,
У меня есть довольно уникальная ситуация, чтобы справиться (я думаю). Итак, сценарий таков, что у меня есть CosmosDb и модель данных, выглядящая следующим образом:
{ "deviceId": "exampleId", "properties": [ { "name": "temperature", "value": 20 }, { "name": "humidity", "value": 10 } ] }
в то время как класс C# выглядит следующим образом:
public class { public string DeviceId { get; set; } public IEnumerable<PropertyObject> Properties { get; set; } } public class PropertyObject { public string Name { get; set; } public object Value { get; set; } }
Таким образом, проблема заключается в том, что мне нужно, чтобы это было отфильтровано по PropertyObject и его значению.
Не было бы никаких проблем, если бы это была жестко типизированная модель, но в этом случае значение-это объект и может быть очень много вещей. Иногда это может быть строка, десятичное или целое число.
Что я уже пробовал:
И очевидно, что это не работает:
properties.Where( x => x.Name == "temperature" && x.Value > 20);
Поскольку ценность-это объект. Это сработает, если я добавлю кастинг:
properties.Where( x => x.Name == "temperature" && (int)x.Value > 20);
Но я не могу жестко закодировать его,так как каждый объект propertyobject может иметь разный тип значения в свойстве Value (int,decimal,datetime, string и т. д.)
Есть ли у вас какие-либо идеи, как это можно сделать для фильтрации CosmosDb в C# с помощью последней версии Azure Cosmos SDK?
У меня есть свободная рука, чтобы изменить код C#, и я могу получить доступ к информации о типе конкретного свойства (из конфигурационного файла).
Может быть, построитель выражений для LINQ был бы здесь хорошим способом?
Я также думаю о том, как бы это работало, если бы модель была динамическим типом, возможно, это позволило бы что-то сделать. Я не знаю, я не настолько опытен в работе с nosql db, как Cosmos.