Пример #1
0
        internal TableQuery <AzureTableOrchestrationStateEntity> CreateQueryInternal(OrchestrationStateQuery stateQuery, int count, bool useTimeRangePrimaryFilter)
        {
            OrchestrationStateQueryFilter primaryFilter = null;
            IEnumerable <OrchestrationStateQueryFilter> secondaryFilters = null;
            Tuple <OrchestrationStateQueryFilter, IEnumerable <OrchestrationStateQueryFilter> > filters =
                stateQuery.GetFilters();

            if (filters != null)
            {
                primaryFilter    = filters.Item1;
                secondaryFilters = filters.Item2;
            }

            string filterExpression = GetPrimaryFilterExpression(primaryFilter, useTimeRangePrimaryFilter);

            if (string.IsNullOrWhiteSpace(filterExpression))
            {
                throw new InvalidOperationException("Invalid primary filter");
            }

            if (secondaryFilters != null)
            {
                filterExpression = secondaryFilters.Aggregate(filterExpression,
                                                              (current, filter) =>
                {
                    string newFilter       = current;
                    string secondaryFilter = GetSecondaryFilterExpression(filter);
                    if (!string.IsNullOrWhiteSpace(secondaryFilter))
                    {
                        newFilter += " and " + secondaryFilter;
                    }

                    return(newFilter);
                });
            }

            TableQuery <AzureTableOrchestrationStateEntity> query =
                new TableQuery <AzureTableOrchestrationStateEntity>().Where(filterExpression);

            if (count != -1)
            {
                query.TakeCount = count;
            }

            return(query);
        }