public async Task <SortedMessagesWindow> ListMessages(string conversationId, string startCt, string endCt, int limit) { string high = string.IsNullOrEmpty(startCt) ? DateTime.MaxValue.Ticks.ToString() : startCt; string low = string.IsNullOrEmpty(endCt) ? DateTime.MinValue.Ticks.ToString() : endCt; TableQuery <MessageEntity> query = new TableQuery <MessageEntity>().Where( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, conversationId), TableOperators.And, TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThan, low), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, high) ) )); query.TakeCount = limit; try { var results = await table.ExecuteQuery(query); List <MessageEntity> entities = results.Results; string newStartCt = "", newEndCt = ""; if (entities.Count > 0) { newStartCt = entities.First().RowKey; newEndCt = entities.Last().RowKey; } IEnumerable <Message> messageList = entities.Select(entity => { long ticks = long.Parse(entity.RowKey); ticks = DateTimeUtils.InvertTicks(ticks); var utcTime = new DateTime(ticks); return(new Message(entity.Text, entity.SenderUsername, utcTime)); }); return(new SortedMessagesWindow(messageList, newStartCt, newEndCt)); } catch (StorageException e) { throw new StorageErrorException("Failed to list messages", e); } }
public async Task <SortedConversationsWindow> ListConversations(string username, string startCt, string endCt, int limit) { if (string.IsNullOrWhiteSpace(username)) { throw new ArgumentNullException(nameof(username)); } string high = string.IsNullOrEmpty(startCt) ? OrderedConversationEntity.MaxRowKey : startCt; string low = string.IsNullOrEmpty(endCt) ? OrderedConversationEntity.MinRowKey : endCt; TableQuery <OrderedConversationEntity> query = new TableQuery <OrderedConversationEntity>().Where( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, username), TableOperators.And, TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThan, low), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, high) ) ) ); query.TakeCount = limit; try { var results = await table.ExecuteQuery(query); List <OrderedConversationEntity> entities = results.Results; string newStartCt = "", newEndCt = ""; if (entities.Count > 0) { newStartCt = entities.First().RowKey; newEndCt = entities.Last().RowKey; } return(new SortedConversationsWindow( entities.Select(entity => new Conversation(entity.ConversationId, entity.Participants.Split(ParticipantsSeparator), entity.GetLastModifiedDateTimeUtc())), newStartCt, newEndCt )); } catch (StorageException e) { throw new StorageErrorException("Failed to list messages", e); } }
/// <summary> /// Executes expression query. /// </summary> /// <param name="expression">Expression.</param> /// <returns>Result.</returns> public override object Execute(Expression expression) { if (expression == null) { throw new ArgumentNullException(nameof(expression)); } var result = new TranslationResult(); _queryTranslator.Translate(expression, result); IEnumerable <DynamicTableEntity> tableEntities = _cloudTable.ExecuteQuery(result.TableQuery); return(GetProcessedResult(tableEntities, result)); }