// NOTE: we don't have a need (yet?) to query commands, as we don't use them to // recreate read models, nor we are using it for BI, so we just // expose events. public IEnumerable <IEvent> Query(QueryCriteria criteria) { var context = this.tableClient; var query = new TableQuery <MessageLogEntity>() .Where(x => x.Kind == StandardMetadata.EventKind); var where = criteria.ToExpression(); if (where != null) { query = query.Where(where); } var table = context.GetTableReference(this.tableName); return(table.ExecuteQuery(query.AsTableQuery()) .ToList() .Select(e => this.serializer.Deserialize <IEvent>(e.Payload))); }
/// <summary> /// Gets the list of all partitions that have pending unpublished events. /// </summary> /// <returns>The list of all partitions.</returns> public IEnumerable <string> GetPartitionsWithPendingEvents() { var query = new TableQuery <EventTableServiceEntity>() .Where( x => String.Compare(x.RowKey, UnpublishedRowKeyPrefix, StringComparison.Ordinal) >= 0 && String.Compare(x.RowKey, UnpublishedRowKeyPrefixUpperLimit, StringComparison.Ordinal) <= 0) .Select(x => new { x.PartitionKey }) .AsTableQuery(); var result = new BlockingCollection <string>(); var continuationToken = new TableContinuationToken(); var queryResult = query.AsTableQuery().ExecuteSegmented(continuationToken); foreach (var key in queryResult.Results.Select(x => x.PartitionKey).Distinct()) { result.Add(key); } return(result.ToList()); }