public async Task QueryFuncAsync(Dictionary <string, object> conditions, TableStorageQueryOperator op, Func <IEnumerable <T>, Task <bool> > func) { _logger?.LogTrace("AsyncTableStorageRepository: QueryFuncAsync - on multiple columns for table {TABLENAME} with operator {OPERATOR}", _tableName, op); TableQuery <T> query = _tableStorageQueryBuilder.TableQuery <T>(conditions, op); TableQuerySegment <T> querySegment = null; bool doContinue = true; int results = 0; while ((querySegment == null || querySegment.ContinuationToken != null) && doContinue) { querySegment = await _table.ExecuteQuerySegmentedAsync(query, querySegment?.ContinuationToken); results += querySegment.Results.Count; doContinue = await func(new List <T>(querySegment.Results)); } _logger?.LogTrace("AsyncTableStorageRepository: QueryFuncAsync - on multiple columns for table {TABLENAME} with operator {OPERATOR} processed {ROWS} rows", _tableName, op, results); }
public async Task <PagedResultSegment <T> > PagedQueryAsync(Dictionary <string, object> columnValues, TableStorageQueryOperator op, int pageSize, string serializedContinuationToken) { _logger?.LogTrace("AsyncTableStorageRepository: PagedQueryAsync - for table {TABLENAME} with operator {OPERATOR} and page size {PAGESIZE}", _tableName, op, pageSize); TableQuery <T> query = _tableStorageQueryBuilder.TableQuery <T>(columnValues, op).Take(pageSize); TableContinuationToken continuationToken = _tableContinuationTokenSerializer.Deserialize(serializedContinuationToken); TableQuerySegment <T> querySegment = await _table.ExecuteQuerySegmentedAsync(query, continuationToken); _logger?.LogTrace("AsyncTableStorageRepository: PagedQueryAsync - for table {TABLENAME} with operator {OPERATOR} and page size {PAGESIZE} returned {ROWS}", _tableName, op, pageSize, querySegment.Results.Count); return(new PagedResultSegment <T> { ContinuationToken = _tableContinuationTokenSerializer.Serialize(querySegment.ContinuationToken), Page = new List <T>(querySegment.Results) }); }
public Task <PagedResultSegment <T> > PagedQueryAsync(Dictionary <string, object> columnValues, TableStorageQueryOperator op, int pageSize) { return(PagedQueryAsync(columnValues, pageSize, null)); }
public TableQuery <T> TableQuery <T>(Dictionary <string, object> columnValues, TableStorageQueryOperator op) where T : ITableEntity, new() { TableQuery <T> query = new TableQuery <T>(); if (columnValues != null && columnValues.Any()) { List <string> tableQueries = new List <string>(); foreach (KeyValuePair <string, object> kvp in columnValues) { if (kvp.Value is string) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterCondition(kvp.Key, QueryComparisons.Equal, (string)kvp.Value)); } else if (kvp.Value is Guid) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForGuid(kvp.Key, QueryComparisons.Equal, (Guid)kvp.Value)); } else if (kvp.Value is bool) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForBool(kvp.Key, QueryComparisons.Equal, (bool)kvp.Value)); } else if (kvp.Value is DateTime) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForDate(kvp.Key, QueryComparisons.Equal, (DateTime)kvp.Value)); } else if (kvp.Value is int) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForInt(kvp.Key, QueryComparisons.Equal, (int)kvp.Value)); } else if (kvp.Value is long) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForLong(kvp.Key, QueryComparisons.Equal, (long)kvp.Value)); } else if (kvp.Value is double) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForDouble(kvp.Key, QueryComparisons.Equal, (double)kvp.Value)); } else { Type dataType = kvp.Value.GetType(); throw new InvalidOperationException(String.Format("Type {0} is not supported in table query operations", dataType.Name)); } } string queryString = tableQueries[0]; string tableOp = op == TableStorageQueryOperator.And ? TableOperators.And : TableOperators.Or; for (int index = 1; index < tableQueries.Count; index++) { string subQueryString = tableQueries[index]; queryString = Microsoft.WindowsAzure.Storage.Table.TableQuery.CombineFilters(queryString, tableOp, subQueryString); } query = query.Where(queryString); } return(query); }
public TableQuery <T> TableQuery <T>(string column, IEnumerable <object> values, TableStorageQueryOperator op) where T : ITableEntity, new() { TableQuery <T> query = new TableQuery <T>(); if (!string.IsNullOrWhiteSpace(column) && values.Any()) { List <string> tableQueries = new List <string>(); foreach (object value in values) { string s = value as string; if (s != null) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterCondition(column, QueryComparisons.Equal, s)); } else if (value is Guid) { tableQueries.Add(Microsoft.WindowsAzure.Storage.Table.TableQuery.GenerateFilterConditionForGuid(column, QueryComparisons.Equal, (Guid)value)); } } string queryString = tableQueries[0]; string tableOp = op == TableStorageQueryOperator.And ? TableOperators.And : TableOperators.Or; for (int index = 1; index < tableQueries.Count; index++) { string subQueryString = tableQueries[index]; queryString = Microsoft.WindowsAzure.Storage.Table.TableQuery.CombineFilters(queryString, tableOp, subQueryString); } query = query.Where(queryString); } return(query); }