コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        /// <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));
        }