События по идентификатору устройства и временные метки из / в группу без использования CosmosDb - PullRequest
0 голосов
/ 21 апреля 2020
public class DeviceEvent
{
    public string DeviceId { get; set; }
    public long Timestamp { get; set; }
    // other fields
}
    public class CosmosDbContext : DbContext
    {
        public CosmosDbContext(DbContextOptions<CosmosDbContext> options) : base(options) { }

        public DbSet<DeviceEventDbo> DeviceEvents { get; set; }
    }

У меня есть правила фильтрации (идентификатор устройства может дублироваться с другим периодом)

List<(string deviceId, long from, long to)> filter = new List<(string, long, long)>
{
    ("DEVICE_ID_A", 1, 2),
    ("DEVICE_ID_A", 6, 9),
    ("DEVICE_ID_B", 1, 4),
    ("DEVICE_ID_C", 4, 7),
};

Мне нужно запрашивать события из базы данных по списку идентификаторов устройств и двум временным меткам из и для каждого устройства

Это означает, что устройство с идентификатором deviceId было активным в период [from; to], и таких устройств много.


Получение все события устройств без отметок времени будут выглядеть так:

List<string> deviceIds = ...
ctx.DeviceEvents.Where(x => deviceIds.Contains(x.DeviceId)).ToList()

Но наличие отметок времени для каждого устройства усложняет эту задачу.


В CosmosDb нет GroupBy, и я хочу Избегайте N + 1 проблем. Любое решение?

...