public List<Tuple<string /* orgId */, string /* homeId */, DateTime /* UtcTime */, HeartbeatInfo>> GetHeartbeatInfoRangeByOrgAndCloudTime(string orgId, string startTimeUtc, string timeOffset) { HeartbeatTable HeartbeatTable = new HeartbeatTable(); List<Tuple<string, string, DateTime, HeartbeatInfo>> timeStampHeartbeatInfoTuples = new List<Tuple<string, string, DateTime, HeartbeatInfo>>(); DateTimeOffset dtoStartTime; DateTimeOffset dtoStopTime; TimeSpan tsTimeOffset; TimeSpan.TryParse(timeOffset, out tsTimeOffset); if (tsTimeOffset.CompareTo(TimeSpan.Zero) >= 0) { DateTimeOffset.TryParse(startTimeUtc, out dtoStartTime); dtoStopTime = dtoStartTime + tsTimeOffset; } else { DateTimeOffset.TryParse(startTimeUtc, out dtoStopTime); dtoStartTime = dtoStopTime + tsTimeOffset; } foreach (HeartbeatTable.HeartbeatEntity hbe in HeartbeatTable.GetHeartbeatEntitiesInTimeRange( orgId, dtoStartTime, dtoStopTime)) { timeStampHeartbeatInfoTuples.Add( new Tuple<string, string, DateTime, HeartbeatInfo>(hbe.PartitionKey, hbe.RowKey, hbe.Timestamp.DateTime, (HeartbeatInfo) new HeartbeatInfo().DeserializeFromJsonStream(hbe.HeartbeatInfo))); } return timeStampHeartbeatInfoTuples; }