Esempio n. 1
0
        private static TableQuery BuildQuery(string channelId, string conversationId, DateTime oldest)
        {
            var    query  = new TableQuery();
            string filter = null;

            if (channelId != null && conversationId != null)
            {
                var pkey = ActivityEntity.GeneratePartitionKey(channelId, conversationId);
                filter = TableQuery.GenerateFilterCondition(TableConstants.PartitionKey, QueryComparisons.Equal, pkey);
            }
            else if (channelId != null)
            {
                var pkey = ActivityEntity.GeneratePartitionKey(channelId, "");
                filter = TableQuery.GenerateFilterCondition(TableConstants.PartitionKey, QueryComparisons.GreaterThanOrEqual, pkey);
            }
            if (oldest != default(DateTime))
            {
                var rowKey    = ActivityEntity.GenerateRowKey(oldest);
                var rowFilter = TableQuery.GenerateFilterCondition(TableConstants.RowKey, QueryComparisons.GreaterThanOrEqual, rowKey);
                if (filter == null)
                {
                    filter = rowFilter;
                }
                else
                {
                    filter = TableQuery.CombineFilters(filter, TableOperators.And, rowFilter);
                }
            }
            if (filter != null)
            {
                query.Where(filter);
            }
            return(query);
        }
Esempio n. 2
0
        /// <summary>
        /// Delete any conversation records older than <paramref name="oldest"/>.
        /// </summary>
        /// <param name="oldest">Maximum timespan from now to remember.</param>
        /// <param name="cancel">Cancellation token.</param>
        async Task IActivityManager.DeleteBeforeAsync(DateTime oldest, CancellationToken cancel)
        {
            var rowKey = ActivityEntity.GenerateRowKey(oldest);
            var query  = new TableQuery <ActivityEntity>()
                         .Where(TableQuery.GenerateFilterCondition(TableConstants.RowKey, QueryComparisons.LessThan, rowKey))
                         .Select(new string[] { TableConstants.PartitionKey, TableConstants.RowKey });

            await DeleteAsync(query, cancel);
        }