Example #1
0
        private void AddNormalExpression(OperatorEnumeration operatorAction, Expression propertyAccess,
                                         MethodInfo methodInfo, Expression converted)
        {
            var callMethod = Expression.Call(propertyAccess,
                                             methodInfo ?? throw new InvalidOperationException(), converted);

            AddLambdaExpression(operatorAction, callMethod);
        }
Example #2
0
        private void BaseFilterDataSet(string key, TableFilterContext value, OperatorEnumeration operatorAction)
        {
            if (value.Value == null)
            {
                return;
            }

            switch (value.MatchMode)
            {
            case FilterTypeMatchModeStartsWith:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantStartsWith
                                                , operatorAction);
                break;

            case FilterTypeMatchModeContains:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantContains
                                                , operatorAction);
                break;

            case FilterTypeMatchModeIn:
                _linqOperator.AddFilterListProperty(key.FirstCharToUpper(), value.Value
                                                    , operatorAction);
                break;

            case FilterTypeMatchModeEndsWith:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantEndsWith
                                                , OperatorEnumeration.None);
                break;

            case FilterTypeMatchModeEquals:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantEquals
                                                , operatorAction);
                break;

            case FilterTypeMatchModeNotContains:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantContains
                                                , OperatorEnumeration.None, true);
                break;

            case FilterTypeMatchModeNotEquals:
                _linqOperator.AddFilterProperty(key.FirstCharToUpper(), value.Value,
                                                LinqOperatorConstants.ConstantEquals
                                                , operatorAction, true);
                break;

            default:
                throw new System.ArgumentException("Invalid Match mode!");
            }
        }
Example #3
0
        private void AddNegationExpression(OperatorEnumeration operatorAction, MemberExpression propertyAccess,
                                           MethodInfo methodInfo, Expression converted)
        {
            if (propertyAccess == null)
            {
                throw new ArgumentNullException(nameof(propertyAccess));
            }
            var callMethod = Expression.Not(Expression.Call(propertyAccess,
                                                            methodInfo ?? throw new InvalidOperationException(), converted));

            AddLambdaExpression(operatorAction, callMethod);
        }
Example #4
0
        public void AddFilterProperty(string propertyName, object propertyValue, string extensionMethod,
                                      OperatorEnumeration operatorAction, bool isNegation = false)
        {
            var property     = _context.DataSetType.GetProperty(propertyName);
            var propertyType = property?.PropertyType;

            if (propertyType != typeof(string) && extensionMethod != LinqOperatorConstants.ConstantEquals)
            {
                throw new ArgumentException($"Property ${propertyName} not support method ${extensionMethod}");
            }

            if (propertyType == null)
            {
                return;
            }

            var propertyAccess =
                Expression.MakeMemberAccess(_context.ParameterExpression,
                                            property ?? throw new InvalidOperationException());
            var methodInfo       = propertyType.GetMethod(extensionMethod, new[] { propertyType });
            var castValue        = ObjectCasterUtil.CastPropertiesType(property, propertyValue);
            var propertyConstant = Expression.Constant(castValue, propertyType);

            if (propertyType.IsGenericType &&
                propertyType.GetGenericTypeDefinition() == typeof(Nullable <>) &&
                propertyType == typeof(DateTime?))
            {
                var converted = Expression.Convert(propertyConstant, typeof(object));
                if (isNegation)
                {
                    AddNegationExpression(operatorAction, propertyAccess, methodInfo, converted);
                }
                else
                {
                    AddNormalExpression(operatorAction, propertyAccess, methodInfo, converted);
                }
            }
            else
            {
                if (isNegation)
                {
                    AddNegationExpression(operatorAction, propertyAccess, methodInfo, propertyConstant);
                }
                else
                {
                    AddNormalExpression(operatorAction, propertyAccess, methodInfo, propertyConstant);
                }
            }
        }
Example #5
0
        public void AddFilterListProperty(string propertyName, object propertyValue, OperatorEnumeration operatorAction)
        {
            var property     = _context.DataSetType.GetProperty(propertyName);
            var propertyType = property?.PropertyType;

            if (propertyType == null)
            {
                return;
            }

            var castValue  = ObjectCasterUtil.CastPropertiesTypeList(property, propertyValue);
            var methodInfo = castValue.GetType()
                             .GetMethod(LinqOperatorConstants.ConstantContains, new[] { propertyType });

            var list  = Expression.Constant(castValue);
            var value = Expression.Property(_context.ParameterExpression, propertyName);

            AddNormalExpression(operatorAction, list, methodInfo, value);
        }
Example #6
0
        private void AddLambdaExpression(OperatorEnumeration operatorAction, Expression callMethod)
        {
            var lambda = Expression.Lambda <Func <TEntity, bool> >(callMethod, _context.ParameterExpression);

            if (_context.Expressions == null)
            {
                _context.Expressions = lambda;
            }
            else
            {
                switch (operatorAction)
                {
                case OperatorEnumeration.And:

                    _context.Expressions =
                        Expression.Lambda <Func <TEntity, bool> >(
                            Expression.AndAlso(_context.Expressions.Body, lambda.Body),
                            _context.ParameterExpression);
                    break;

                case OperatorEnumeration.Or:
                    _context.Expressions =
                        Expression.Lambda <Func <TEntity, bool> >(
                            Expression.OrElse(_context.Expressions.Body, lambda.Body),
                            _context.ParameterExpression);
                    break;

                default:
                    _context.Expressions =
                        Expression.Lambda <Func <TEntity, bool> >(
                            Expression.AndAlso(_context.Expressions.Body, lambda.Body),
                            _context.ParameterExpression);
                    break;
                }
            }
        }
Example #7
0
        public static ResultEnumeration CombineResultsByOperator(
            IEnumerable<ResultEnumeration> results, OperatorEnumeration op)
        {
            ResultEnumeration combinedResult = ResultEnumeration.unknown;

            if (results.Count() > 0)
            {
                // Get counts of result values
                int trueCount = 0;
                int falseCount = 0;
                int unknownCount = 0;
                int errorCount = 0;
                int notEvaluatedCount = 0;
                int notApplicableCount = 0;

                foreach (ResultEnumeration result in results)
                {
                    switch (result)
                    {
                        case ResultEnumeration.@true:
                            trueCount++;
                            break;
                        case ResultEnumeration.@false:
                            falseCount++;
                            break;
                        case ResultEnumeration.unknown:
                            unknownCount++;
                            break;
                        case ResultEnumeration.error:
                            errorCount++;
                            break;
                        case ResultEnumeration.notevaluated:
                            notEvaluatedCount++;
                            break;
                        case ResultEnumeration.notapplicable:
                            notApplicableCount++;
                            break;

                    }
                }

                // first check for a possible Not Applicable result
                if (notApplicableCount > 0 && notEvaluatedCount == 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && trueCount == 0)
                {
                    return ResultEnumeration.notapplicable;
                }

                // Set the combined result
                if (op == OperatorEnumeration.AND)
                {
                    if (trueCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (falseCount == 0 && errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && falseCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.ONE)
                {

                    if (trueCount == 1 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount >= 2 && falseCount >= 0 && errorCount >= 0 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (trueCount == 0 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount >= 1 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount >= 1 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount >= 1 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.OR)
                {
                    if (trueCount > 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0 && trueCount == 0 && unknownCount == 0 && errorCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.XOR)
                {
                    if (trueCount % 2 == 1 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount % 2 == 0 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && errorCount == 00)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }

            }

            return combinedResult;
        }
Example #8
0
 public TestType() {
     this.check_existenceField = ExistenceEnumeration.at_least_one_exists;
     this.state_operatorField = OperatorEnumeration.AND;
     this.deprecatedField = false;
 }
Example #9
0
 public TestType1() {
     this.variable_instanceField = "1";
     this.check_existenceField = ExistenceEnumeration.at_least_one_exists;
     this.state_operatorField = OperatorEnumeration.AND;
 }
Example #10
0
 public CriteriaType() {
     this.operatorField = OperatorEnumeration.AND;
     this.negateField = false;
 }
Example #11
0
 public StateType() {
     this.operatorField = OperatorEnumeration.AND;
     this.deprecatedField = false;
 }
Example #12
0
 public TestType()
 {
     this.variable_instanceField = "1";
     this.check_existenceField   = ExistenceEnumeration.at_least_one_exists;
     this.state_operatorField    = OperatorEnumeration.AND;
 }
Example #13
0
        public static ResultEnumeration CombineResultsByOperator(
            IEnumerable <ResultEnumeration> results, OperatorEnumeration op)
        {
            ResultEnumeration combinedResult = ResultEnumeration.unknown;

            if (results.Count() > 0)
            {
                // Get counts of result values
                int trueCount          = 0;
                int falseCount         = 0;
                int unknownCount       = 0;
                int errorCount         = 0;
                int notEvaluatedCount  = 0;
                int notApplicableCount = 0;

                foreach (ResultEnumeration result in results)
                {
                    switch (result)
                    {
                    case ResultEnumeration.@true:
                        trueCount++;
                        break;

                    case ResultEnumeration.@false:
                        falseCount++;
                        break;

                    case ResultEnumeration.unknown:
                        unknownCount++;
                        break;

                    case ResultEnumeration.error:
                        errorCount++;
                        break;

                    case ResultEnumeration.notevaluated:
                        notEvaluatedCount++;
                        break;

                    case ResultEnumeration.notapplicable:
                        notApplicableCount++;
                        break;
                    }
                }

                // first check for a possible Not Applicable result
                if (notApplicableCount > 0 && notEvaluatedCount == 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && trueCount == 0)
                {
                    return(ResultEnumeration.notapplicable);
                }

                // Set the combined result
                if (op == OperatorEnumeration.AND)
                {
                    if (trueCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (falseCount == 0 && errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && falseCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.ONE)
                {
                    if (trueCount == 1 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount >= 2 && falseCount >= 0 && errorCount >= 0 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (trueCount == 0 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount >= 1 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount >= 1 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount >= 1 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.OR)
                {
                    if (trueCount > 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0 && trueCount == 0 && unknownCount == 0 && errorCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.XOR)
                {
                    if (trueCount % 2 == 1 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount % 2 == 0 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && errorCount == 00)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
            }

            return(combinedResult);
        }