public static TableQuery <T> BetweenQuery(string rowKeyFrom, string rowKeyTo,
                                                          ToIntervalOption intervalOption)
                {
                    var sqlFilter = GenerateRowFilterString(rowKeyFrom, rowKeyTo, intervalOption);

                    return(new TableQuery <T>().Where(sqlFilter));
                }
            public static TableQuery <T> BetweenQuery(string partitionKey, string rowKeyFrom, string rowKeyTo,
                                                      ToIntervalOption intervalOption)
            {
                var sqlFilter = "PartitionKey " + QueryComparisons.Equal + " '" + partitionKey + "' and " +
                                GenerateRowFilterString(rowKeyFrom, rowKeyTo, intervalOption);

                return(new TableQuery <T>().Where(sqlFilter));
            }
                /// <summary>
                ///     Генерация запроса-диапазона только по PartitionKey
                /// </summary>
                /// <param name="from">Partition from</param>
                /// <param name="to">Partition to</param>
                /// <param name="intervalOption">Включить участок to</param>
                /// <returns></returns>
                public static TableQuery <T> BetweenQuery(string from, string to, ToIntervalOption intervalOption)
                {
                    var sqlFilter = intervalOption == ToIntervalOption.IncludeTo
                        ? "PartitionKey " + QueryComparisons.GreaterThanOrEqual + " '" + from + "' and " +
                                    "PartitionKey " + QueryComparisons.LessThanOrEqual + " '" + to + "'"
                        : "PartitionKey " + QueryComparisons.GreaterThanOrEqual + " '" + from + "' and " +
                                    "PartitionKey " + QueryComparisons.LessThan + " '" + to + "'";

                    return(new TableQuery <T>().Where(sqlFilter));
                }
            public static TableQuery <T> BetweenQuery(string partitionKey, DateTime rowKeyFrom, DateTime rowKeyTo,
                                                      ToIntervalOption intervalOption,
                                                      bool includeTime = false)
            {
                var sqlFilter = "PartitionKey " + QueryComparisons.Equal + " '" + partitionKey + "' and " +
                                GenerateRowFilterString(ConvertDateTimeToString(rowKeyFrom, includeTime),
                                                        ConvertDateTimeToString(rowKeyTo, includeTime), intervalOption);

                return(new TableQuery <T>().Where(sqlFilter));
            }
            public static TableQuery <T> RangeQuery(string partitionFrom, string partitionTo, string rowKey,
                                                    ToIntervalOption intervalOption)
            {
                var sqlFilter = intervalOption == ToIntervalOption.IncludeTo
                    ? "PartitionKey " + QueryComparisons.GreaterThanOrEqual + " '" + partitionFrom + "' and " +
                                "PartitionKey " + QueryComparisons.LessThanOrEqual + " '" + partitionTo + "'"
                    : "PartitionKey " + QueryComparisons.GreaterThanOrEqual + " '" + partitionFrom + "' and " +
                                "PartitionKey " + QueryComparisons.LessThan + " '" + partitionTo + "'";

                return
                    (new TableQuery <T>().Where(sqlFilter + " and RowKey " + QueryComparisons.Equal + " '" + rowKey + "'"));
            }
            private static string GenerateRowFilterString(string rowKeyFrom, string rowKeyTo,
                                                          ToIntervalOption intervalOption)
            {
                if (intervalOption == ToIntervalOption.IncludeTo)
                {
                    return
                        ("RowKey " + QueryComparisons.GreaterThanOrEqual + " '" + rowKeyFrom + "' and " +
                         "RowKey " + QueryComparisons.LessThanOrEqual + " '" + rowKeyTo + "'");
                }

                return
                    ("RowKey " + QueryComparisons.GreaterThanOrEqual + " '" + rowKeyFrom + "' and " +
                     "RowKey " + QueryComparisons.LessThan + " '" + rowKeyTo + "'");
            }
        public async static Task <IEnumerable <T> > WhereAsync <T>(this IAzureTableStorage <T> tableStorage, IEnumerable <string> partitionKeys, DateTime from, DateTime to,
                                                                   ToIntervalOption intervalOption, Func <T, bool> filter = null)
            where T : ITableEntity, new()
        {
            var result = new List <T>();

            await Task.WhenAll(
                partitionKeys.Select(partitionKey => tableStorage.WhereAsync(partitionKey, from, to, intervalOption, filter)
                                     .ContinueWith(task =>
            {
                lock (result) result.AddRange(task.Result);
            }))
                );

            return(result);
        }
            public static TableQuery <T> BetweenQuery(IEnumerable <string> partitionKeys, DateTime rowKeyFrom,
                                                      DateTime rowKeyTo, ToIntervalOption intervalOption)
            {
                var partitions = new StringBuilder();

                foreach (var partitionKey in partitionKeys)
                {
                    if (partitions.Length > 0)
                    {
                        partitions.Append(" or ");
                    }

                    partitions.Append("PartitionKey " + QueryComparisons.Equal + " '" + partitionKey + "'");
                }

                var sqlFilter = "(" + partitions + ") and " +
                                GenerateRowFilterString(ConvertDateTimeToString(rowKeyFrom),
                                                        ConvertDateTimeToString(rowKeyTo), intervalOption);

                return(new TableQuery <T>().Where(sqlFilter));
            }
        public static Task <IEnumerable <T> > WhereAsync <T>(this IAzureTableStorage <T> tableStorage, string partitionKey,
                                                             DateTime from, DateTime to, ToIntervalOption intervalOption, Func <T, bool> filter = null)
            where T : ITableEntity, new()
        {
            var rangeQuery = QueryGenerator <T> .BetweenQuery(partitionKey, from, to, intervalOption);

            return(filter == null
                ? tableStorage.ExecuteQueryAsync(rangeQuery)
                : tableStorage.ExecuteQueryAsync(rangeQuery, filter));
        }
                public static TableQuery <T> BetweenQuery(DateTime from, DateTime to, ToIntervalOption intervalOption)
                {
                    var sqlFilter = GenerateRowFilterString(ConvertDateTimeToString(@from), ConvertDateTimeToString(to), intervalOption);

                    return(new TableQuery <T>().Where(sqlFilter));
                }
 public static TableQuery <T> BetweenQuery(DateTime @from, DateTime to, ToIntervalOption intervalOption)
 {
     return(BetweenQuery(ConvertDateTimeToString(@from), ConvertDateTimeToString(to), intervalOption));
 }