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 проблем. Любое решение?