/// <summary> /// Compile expression collection to query predicate. /// </summary> /// <param name="expressions"></param> /// <returns></returns> public LinqPredicate CompileQuery(QueryParameterExpressionCollection expressions) { if (expressions.Count == 0) return null; List<string> predicates = new List<string>(); ArrayList parameters = new ArrayList(); foreach (QueryParameterExpression exp in expressions) { QueryFieldOperators op = GetOperator(exp); string expressionString = AssemblyExpressionString(exp.FieldName, exp.Operator, exp.Value, parameters); predicates.Add(expressionString); } return new LinqPredicate(predicates.Concat(" AND "), parameters.ToArray()); }
/// <summary> /// Build <seealso cref="QueryParameterExpressionCollection"/> from collection of queryFieldConfigurations and posted values. /// </summary> /// <param name="queryFieldConfigurations"></param> /// <param name="postedValuesByControlIndex"></param> /// <returns></returns> public static QueryParameterExpressionCollection BuildQueryParameterExpressions(IEnumerable<QueryFieldConfiguration> queryFieldConfigurations, IEnumerable<KeyValuePair<int, string>> postedValuesByControlIndex) { QueryParameterExpressionCollection results = new QueryParameterExpressionCollection(); IDictionary<int, QueryFieldConfiguration> queryFieldConfigurationByControlIndex = BuildQueryFieldConfiguration(queryFieldConfigurations); IControlValueResolverFactory controlValueResolverFactory = SpringContext.Current.GetObject<IControlValueResolverFactory>(); foreach (KeyValuePair<int, string> postedVaule in postedValuesByControlIndex) { if (postedVaule.Key >= queryFieldConfigurationByControlIndex.Count) throw new ValidationException(string.Format(CultureInfo.InvariantCulture, Resources.DPCtrl_PostedValueControlIndexInvalid, postedVaule.Key)); QueryFieldConfiguration queryFieldConfiguration = queryFieldConfigurationByControlIndex[postedVaule.Key]; object fieldValue = controlValueResolverFactory.Resolve(queryFieldConfiguration, postedVaule.Value); results.Add(new QueryParameterExpression(queryFieldConfiguration.FieldName, queryFieldConfiguration.Operator, fieldValue, queryFieldConfiguration)); } return results; }