public OperationValues RunOperationFilters(OperationFilterType pre, OperationValues operationValues)
 {
     foreach (var operationFilter in OperationFilters[pre])
     {
         operationValues = operationFilter.Run(operationValues);
     }
     return(operationValues);
 }
示例#2
0
 private IEnumerable <Expression <Func <TEntity, bool> > > ToExpression <T>(string field, OperationFilterType operationFilter, object p1, object p2)
 {
     throw new NotImplementedException();
 }
示例#3
0
        //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());
        }