コード例 #1
0
        public async Task <int> SaveSuggestClausesAsync(IEnumerable <Clause> clauses)
        {
            if (clauses == null || clauses.Count() == 0)
            {
                return(0);
            }

            var tasks = clauses.Select(async clause =>
            {
                var newClause = new ClauseTableEntity(clause)
                {
                    ETag = "*"
                };
                TableQuery <ClauseTableEntity> query = new TableQuery <ClauseTableEntity>()
                                                       .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, newClause.PartitionKey));
                var clauseEntities = await _clauseTableStorageClient.ExecuteQueryAsync(query);
                // There is limitation of scalability for this implementation to increase the hit count because
                // storage table don't have good support for concurrent write for the same entity.
                TableOperation operation;
                if (clauseEntities.Any())
                {
                    newClause.HitCounter = clauseEntities.First().HitCounter + 1;
                    operation            = TableOperation.Replace(newClause);
                }
                else
                {
                    operation = TableOperation.Insert(newClause);
                }

                return(await _clauseTableStorageClient.ExecuteAsync(operation));
            });

            return((await Task.WhenAll(tasks)).Count());
        }
コード例 #2
0
        public async Task <int> DeleteSuggestClausesAsync(IEnumerable <Clause> clauses)
        {
            if (clauses == null || clauses.Count() == 0)
            {
                return(0);
            }

            var tasks = clauses.Select(async c =>
            {
                var entity = new ClauseTableEntity(c)
                {
                    ETag = "*"
                };
                return(await _clauseTableStorageClient.DoDeleteAsync(entity, BuildClauseFromEntity));
            });

            var results = await Task.WhenAll(tasks);

            return(results.Where(r => r.Status == TableStorageResponseStatus.Successful).Count());
        }
コード例 #3
0
        private Clause BuildClauseFromEntity(ClauseTableEntity entity)
        {
            if (entity == null)
            {
                return(null);
            }

            ClauseType clauseType;

            try
            {
                Enum.TryParse(entity.ClauseType, out clauseType);
            }
            catch
            {
                clauseType = ClauseType.EQ;
            }

            TwinDataType clauseDataType;

            try
            {
                Enum.TryParse(entity.ClauseDataType, out clauseDataType);
            }
            catch
            {
                clauseDataType = TwinDataType.String;
            }

            return(new Clause
            {
                ColumnName = entity.ColumnName,
                ClauseType = clauseType,
                ClauseValue = entity.ClauseValue,
                ClauseDataType = clauseDataType,
            });
        }