public ExpressionParsingAttribute(string propertyName, ExpressionParsingOperator expressionOperator, string namesofCandidateProperties) { NameOfTheProperty = propertyName; ExpressionOperatorUsed = expressionOperator; NamesofCandidateProperties = namesofCandidateProperties; }
public ExpressionParsingAttribute(string propertyName, ExpressionParsingOperator expressionOperator) { NameOfTheProperty = propertyName; ExpressionOperatorUsed = expressionOperator; }
private static HashSet <SqlWhereParameter> ExtractBackendParameters(Params source) { HashSet <SqlWhereParameter> result = new HashSet <SqlWhereParameter>(); var type = source.GetType(); foreach (var propertyInfo in type.GetProperties()) { var propertyValue = propertyInfo.GetValue(source); if (propertyValue == null) { continue; } var propertyName = string.Empty; var propertyOperator = string.Empty; var candidateProperties = string.Empty; ExpressionParsingOperator propertyOperatorEnum = ExpressionParsingOperator.Equals; foreach (var attr in propertyInfo.GetCustomAttributes(typeof(ExpressionParsingAttribute), false)) { var expressionAttribute = (ExpressionParsingAttribute)attr; propertyName = expressionAttribute.NameOfTheProperty; propertyOperatorEnum = expressionAttribute.ExpressionOperatorUsed; propertyOperator = propertyOperatorEnum.GetDescription(); candidateProperties = expressionAttribute.NamesofCandidateProperties; } if (string.IsNullOrEmpty(propertyName) || string.IsNullOrEmpty(propertyOperator)) { continue; } var parameter = new SqlWhereParameter() { PropertyName = propertyName, PropertyValue = propertyValue, Operator = propertyOperatorEnum, }; if (propertyOperatorEnum == ExpressionParsingOperator.NoComparing) { if (propertyValue is bool && (bool)propertyValue) { parameter.IsNormalized = true; } else { continue; } } if (propertyOperatorEnum == ExpressionParsingOperator.CandidatesContain) { //parameter has no candidates if (string.IsNullOrEmpty(candidateProperties)) { continue; } //extract similarity candidates else { parameter.CandidateNames = candidateProperties.Split(',').ToList(); } } //for int enums only Type u = Nullable.GetUnderlyingType(propertyInfo.PropertyType); if (u != null && u.IsEnum) { parameter.PropertyValue = (int)propertyValue; } //convert enum list to int list if (propertyOperatorEnum == ExpressionParsingOperator.IsPartOfEnumList && propertyValue is IEnumerable && propertyValue.GetType().GetGenericArguments().First().IsEnum) { parameter.PropertyValue = ((IEnumerable)propertyValue).ToDynamicArray().Select(x => (int)x).ToList(); } //for datetime ranges if (propertyOperatorEnum == ExpressionParsingOperator.GreaterThan || propertyOperatorEnum == ExpressionParsingOperator.GreaterThanOrEquals && propertyValue is DateTime?) { var date = ((DateTime?)propertyValue).Value; parameter.PropertyValue = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second); } else if (propertyOperatorEnum == ExpressionParsingOperator.LessThan || propertyOperatorEnum == ExpressionParsingOperator.LessThanOrEquals && propertyValue is DateTime?) { var date = ((DateTime?)propertyValue).Value; parameter.PropertyValue = new DateTime(date.Year, date.Month, date.Day, 23, 59, 59); } result.Add(parameter); } return(result); }