public OperationValues RunOperationFilters(OperationFilterType pre, OperationValues operationValues) { foreach (var operationFilter in OperationFilters[pre]) { operationValues = operationFilter.Run(operationValues); } return(operationValues); }
private IEnumerable <Expression <Func <TEntity, bool> > > ToExpression <T>(string field, OperationFilterType operationFilter, object p1, object p2) { throw new NotImplementedException(); }
//protected virtual DataSet InternalGet(SingleSearchRequest predicates) //{ // //AlterSession(); // var recordsPerPage = predicates.Data.RecordsPerPage > 0 ? predicates.Data.RecordsPerPage : 20; // var pageNumber = predicates.Data.PageNumber > 0 ? predicates.Data.PageNumber : 1; // var returnEnumerable = PersistenceContext.Query<TModel>(); // var repository = new Repository<TEntity>(); // // exemplo: na página 2 para 10 registros por página temos skip = 11 e take = 20 // var skip = this.Skip(pageNumber, recordsPerPage); // var take = this.Take(recordsPerPage); // if (predicates.Data.Fields != null && predicates.Data.Fields.Any()) // { // var defaultField = predicates.Data.Fields.FirstOrDefault().Field; // var searchExpressions = this.ToExpression(predicates, defaultField); // foreach (Expression<Func<TEntity, bool>> searchExpression in searchExpressions) // { // returnEnumerable = Queryable.Where<TEntity>(returnEnumerable, searchExpression); // } // } // #region TotalPages / TotalRecords // var totalRecords = returnEnumerable.Count(); // var totalPages = (int)Math.Ceiling((double)totalRecords / recordsPerPage); // #endregion // #region .: ordenação dos dados :. // if (!string.IsNullOrEmpty(predicates.Data.OrderBy)) // { // var type = typeof(TEntity); // var prop = type.GetProperties().FirstOrDefault(p => p.Name == predicates.Data.OrderBy); // if (prop != null) // { // var parameter = Expression.Parameter(type, "p"); // var propertyAccess = Expression.MakeMemberAccess(parameter, prop); // var orderByExp = Expression.Lambda(propertyAccess, parameter); // var resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, prop.PropertyType }, returnEnumerable.Expression, Expression.Quote(orderByExp)); // returnEnumerable = returnEnumerable.Provider.CreateQuery<TEntity>(resultExp); // } // } // #endregion // return new // { // Data = returnEnumerable.Skip(skip).Take(take).ToList(), // Pages = totalPages, // Records = totalRecords, // RecordsPerPage = predicates.Data.RecordsPerPage // }; //} public virtual Expression <Func <TEntity, bool> >[] ToExpression <TFieldType>(string field, OperationFilterType op, TFieldType value1, TFieldType value2) { var result = new List <Expression <Func <TEntity, bool> > >(); if (op.Equals(OperationFilterType.Contem)) { result.Add(HelperFilter <TEntity> .Contains <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.Diferente)) { result.Add(HelperFilter <TEntity> .NotEqual <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.ForaDoIntervalo)) { result.AddRange(HelperFilter <TEntity> .NotBetween <TFieldType>(field, value1, value2)); } else if (op.Equals(OperationFilterType.Igual)) { result.Add(HelperFilter <TEntity> .Equal <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.Maior)) { result.Add(HelperFilter <TEntity> .GreaterThan <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.MaiorOuIgual)) { result.Add(HelperFilter <TEntity> .GreaterThanOrEqual <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.Menor)) { result.Add(HelperFilter <TEntity> .LessThan <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.MenorOuIgual)) { result.Add(HelperFilter <TEntity> .LessThanOrEqual <TFieldType>(field, value1)); } else if (op.Equals(OperationFilterType.NaoContem)) { result.Add(HelperFilter <TEntity> .NotContains <TFieldType>(field, value1)); } else { result.AddRange(HelperFilter <TEntity> .Between <TFieldType>(field, value1, value2)); } return(result.ToArray()); }