string? GetODataFilter()

in src/DurableTask.AzureStorage/Tracking/OrchestrationInstanceStatusQueryCondition.cs [112:163]


        string? GetODataFilter()
        {
            var conditions = new List<string>();
            if (this.CreatedTimeFrom > DateTime.MinValue)
            {
                conditions.Add($"{nameof(OrchestrationInstanceStatus.CreatedTime)} ge datetime'{this.CreatedTimeFrom:O}'");
            }

            if (this.CreatedTimeTo != default(DateTime) && this.CreatedTimeTo < DateTime.MaxValue)
            {
                conditions.Add($"{nameof(OrchestrationInstanceStatus.CreatedTime)} le datetime'{this.CreatedTimeTo:O}'");
            }

            if (this.RuntimeStatus != null && this.RuntimeStatus.Any())
            {
                conditions.Add($"{string.Join(" or ", this.RuntimeStatus.Select(x => $"{nameof(OrchestrationInstanceStatus.RuntimeStatus)} eq '{x:G}'"))}");
            }

            if (this.TaskHubNames != null && this.TaskHubNames.Any())
            {
                conditions.Add($"{string.Join(" or ", this.TaskHubNames.Select(x => $"TaskHubName eq '{x}'"))}");
            }

            if (!string.IsNullOrEmpty(this.InstanceIdPrefix))
            {
                string sanitizedPrefix = KeySanitation.EscapePartitionKey(this.InstanceIdPrefix);
                int length = sanitizedPrefix.Length - 1;
                char incrementedLastChar = (char)(sanitizedPrefix[length] + 1);

                string greaterThanPrefix = sanitizedPrefix.Substring(0, length) + incrementedLastChar;

                conditions.Add($"{nameof(OrchestrationInstanceStatus.PartitionKey)} ge '{sanitizedPrefix}'");
                conditions.Add($"{nameof(OrchestrationInstanceStatus.PartitionKey)} lt '{greaterThanPrefix}'");
            }
            else if (this.ExcludeEntities)
            {
                conditions.Add($"{nameof(OrchestrationInstanceStatus.PartitionKey)} lt '@' or {nameof(OrchestrationInstanceStatus.PartitionKey)} ge 'A'");
            }

            if (this.InstanceId != null)
            {
                string sanitizedInstanceId = KeySanitation.EscapePartitionKey(this.InstanceId);
                conditions.Add($"{nameof(OrchestrationInstanceStatus.PartitionKey)} eq '{sanitizedInstanceId}'");
            }

            return conditions.Count switch
            {
                0 => null,
                1 => conditions[0],
                _ => string.Join(" and ", conditions.Select(c => $"({c})")),
            };
        }