private void AddNormalExpression(OperatorEnumeration operatorAction, Expression propertyAccess, MethodInfo methodInfo, Expression converted) { var callMethod = Expression.Call(propertyAccess, methodInfo ?? throw new InvalidOperationException(), converted); AddLambdaExpression(operatorAction, callMethod); }
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!"); } }
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); }
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); } } }
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); }
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; } } }
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; }
public TestType() { this.check_existenceField = ExistenceEnumeration.at_least_one_exists; this.state_operatorField = OperatorEnumeration.AND; this.deprecatedField = false; }
public TestType1() { this.variable_instanceField = "1"; this.check_existenceField = ExistenceEnumeration.at_least_one_exists; this.state_operatorField = OperatorEnumeration.AND; }
public CriteriaType() { this.operatorField = OperatorEnumeration.AND; this.negateField = false; }
public StateType() { this.operatorField = OperatorEnumeration.AND; this.deprecatedField = false; }
public TestType() { this.variable_instanceField = "1"; this.check_existenceField = ExistenceEnumeration.at_least_one_exists; this.state_operatorField = OperatorEnumeration.AND; }
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); }