/// <inheritdoc/> public async Task <bool> Handle(DeleteCommand <TEntity> request, CancellationToken cancellationToken) { try { var dbSet = this.context.Set <TEntity>(); var requestExpression = request.ParentExpression ?? (x => true); var currentEntity = dbSet .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile()) .FirstOrDefault(); if (currentEntity != null) { dbSet.Remove(currentEntity); await this.context.SaveChangesAsync(cancellationToken); return(true); } return(false); } catch (Exception ex) { await this.logger.LogErrorAsync(ex, nameof(DeleteCommandHandler <TEntity>)); return(false); } }
protected virtual Expression <Func <TEntity, bool> > GetEntitySearchQueryExpressionByFilterQueryRequest <TEntity>(FilterQueryRequest filterQuery) { if (filterQuery.EmptyQuery) { return(null); } Type entityType = typeof(TEntity); var expressionsList = new List <Expression <Func <TEntity, bool> > >(); if (filterQuery.FilterQueryStringItems != null && filterQuery.FilterQueryStringItems.Count > 0) { var expressionFactories = new ExpressionFactories(); foreach (var queryStringItem in filterQuery.FilterQueryStringItems) { Expression <Func <TEntity, bool> > currentExpression = expressionFactories[queryStringItem.EqualityType].BuildExpressionByQueryStringItem <TEntity>(queryStringItem); if (currentExpression != null) { expressionsList.Add(currentExpression); } } } var resultExpression = expressionsList.FirstOrDefault(); for (int i = 1; i < expressionsList.Count; i++) { resultExpression = ExpressionFunctions.AndAlso <TEntity>(resultExpression, expressionsList[i]); } return(resultExpression); }
private Expression <Func <TEntity, bool> > BuildRequestExpression(GetAllQuery <TEntity, TRequestModel> request) { var expressionList = new List <Expression <Func <TEntity, bool> > >(); var queryExpressionBySearchQuery = !string.IsNullOrEmpty(request.SearchQuery) ? ExpressionBuilders.BuildQueryExpressionBySearchQuery <TEntity>(request.SearchQuery) : null; if (queryExpressionBySearchQuery != null) { expressionList.Add(queryExpressionBySearchQuery); } if (request.ParentExpression != null) { expressionList.Add(request.ParentExpression); } Expression <Func <TEntity, bool> > requestExpression = x => true; if (expressionList.Count > 0) { foreach (var expression in expressionList) { requestExpression = ExpressionFunctions.AndAlso(requestExpression, expression); } } return(requestExpression); }
protected virtual Expression <Func <TEntity, bool> > GetEntitySearchQueryExpression <TEntity>(string searchQuery, bool showDeleted = false) where TEntity : class, IEntityBase { var searchQueryArray = searchQuery.ToLower().Split(' ', ',', ';'); Type entityType = typeof(TEntity); var entityProperties = entityType.GetProperties(); var expressionsList = new List <Expression <Func <TEntity, bool> > >(); foreach (var property in entityProperties) { if (property.GetCustomAttributes(typeof(SearchCriteriaAttribute), false).Length > 0) { Expression <Func <TEntity, bool> > currentExpression = x => x.GetType().GetProperty(property.Name).GetValue(x) != null && (x.GetType().GetProperty(property.Name).GetValue(x).ToString().ToLower().Contains(searchQuery.ToLower()) || searchQueryArray.Contains(x.GetType().GetProperty(property.Name).GetValue(x).ToString().ToLower())); expressionsList.Add(currentExpression); } } var propertyExpression = expressionsList.FirstOrDefault(); for (int i = 1; i < expressionsList.Count; i++) { propertyExpression = ExpressionFunctions.OrElse <TEntity>(propertyExpression, expressionsList[i]); } var resultExpression = ExpressionFunctions.AndAlso <TEntity>(x => x.Deleted == showDeleted, propertyExpression); return(resultExpression); }
/// <inheritdoc/> public async Task <Guid?> Handle(EditCommand <TEntity, TRequestModel> request, CancellationToken cancellationToken) { try { var dbSet = this.context.Set <TEntity>(); var requestExpression = request.ParentExpression ?? (x => true); var currentEntity = dbSet .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile()) .FirstOrDefault(); if (currentEntity != null) { this.mapper.Map(request.Model, currentEntity); currentEntity.Id = request.EntityId; dbSet.Update(currentEntity); await this.context.SaveChangesAsync(cancellationToken); return(request.EntityId); } return(null); } catch (Exception ex) { await this.logger.LogErrorAsync(ex, nameof(EditCommandHandler <TEntity, TRequestModel>)); return(null); } }
/// <inheritdoc/> public async Task <TRequestModel> Handle(DetailsQuery <TEntity, TRequestModel> request, CancellationToken cancellationToken) { try { var requestExpression = request.ParentExpression ?? (x => true); var entity = this.context .Set <TEntity>() .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile()) .FirstOrDefault(); var requestModel = this.mapper.Map <TRequestModel>(entity); return(requestModel); } catch (Exception ex) { await this.logger.LogErrorAsync(ex, nameof(DetailsQueryHandler <TEntity, TRequestModel>)); return(null); } }