/// <summary>
 /// Construct expression by a series of parameters.
 /// </summary>
 /// <param name="fieldName">Query expression field name</param>
 /// <param name="op">Query expression operator</param>
 /// <param name="value">Query expression value</param>
 /// <param name="configuration">Query field configuration</param>
 public QueryParameterExpression(string fieldName, QueryFieldOperators op, object value, QueryFieldConfiguration configuration)
 {
     this.FieldName = fieldName;
     this.Operator = op;
     this.Value = value;
     this.Configuration = configuration;
 }
        /// <summary>
        /// Assembly query field name, operator and value to a predicate expression.
        /// </summary>
        /// <param name="fieldName"></param>
        /// <param name="op"></param>
        /// <param name="expressionValue"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private static string AssemblyExpressionString(string fieldName, QueryFieldOperators op, object expressionValue, ArrayList parameters)
        {
            if (expressionValue == null) return null;

            int startParameterIndex, parameterCount;
            List<string> subExpressions;
            string expressionString = "";
            switch (op)
            {
                case QueryFieldOperators.Equal:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}==@{1}", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue);
                    break;

                case QueryFieldOperators.GreaterEqualThan:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}>=@{1}", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue);
                    break;

                case QueryFieldOperators.GreaterThan:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}>@{1}", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue);
                    break;

                case QueryFieldOperators.LessEqualThan:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}<=@{1}", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue);
                    break;

                case QueryFieldOperators.LessThan:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}<@{1}", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue);
                    break;

                case QueryFieldOperators.Like:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}.Contains(@{1})", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue.ToString());
                    break;

                case QueryFieldOperators.StartsWith:
                    expressionString = string.Format(CultureInfo.InvariantCulture, "{0}.StartsWith(@{1})", fieldName, parameters.Count);
                    AddParameter(parameters, expressionValue.ToString());
                    break;

                case QueryFieldOperators.In:
                    startParameterIndex = parameters.Count;
                    parameterCount = AddParameter(parameters, expressionValue);
                    subExpressions = new List<string>();
                    for (int parameterIndex = startParameterIndex; parameterIndex < startParameterIndex + parameterCount; parameterIndex++)
                        subExpressions.Add(string.Format(CultureInfo.InvariantCulture, "{0}==@{1}", fieldName, parameterIndex));

                    expressionString = string.Format(CultureInfo.InvariantCulture, "({0})", subExpressions.Concat(" OR "));
                    break;

                case QueryFieldOperators.NotIn:
                    startParameterIndex = parameters.Count;
                    parameterCount = AddParameter(parameters, expressionValue);
                    subExpressions = new List<string>();
                    for (int parameterIndex = startParameterIndex; parameterIndex < startParameterIndex + parameterCount; parameterIndex++)
                        subExpressions.Add(string.Format(CultureInfo.InvariantCulture, "{0}!=@{1}", fieldName, parameterIndex));

                    expressionString = string.Format(CultureInfo.InvariantCulture, "({0})", subExpressions.Concat(" AND "));
                    break;

                case QueryFieldOperators.Between:
                    IEnumerable enumerableExpressionValues = expressionValue as IEnumerable;
                    if (enumerableExpressionValues == null)
                        throw new ArgumentException(Resources.DP_BetweenValueMustBeEnumerableWithTwoItems);

                    IEnumerable<object> expressionValues = enumerableExpressionValues.Cast<object>();
                    if (expressionValues.Count() != 2)
                        throw new ArgumentException(Resources.DP_BetweenValueMustBeEnumerableWithTwoItems);

                    expressionString = string.Format(CultureInfo.InvariantCulture, "({0}>=@{1} AND {0}<@{2})", fieldName, parameters.Count, parameters.Count + 1);
                    AddParameter(parameters, expressionValue);
                    break;
            }

            return expressionString;
        }
 /// <summary>
 /// Construct expression by a series of parameters.
 /// </summary>
 /// <param name="fieldName">Query expression field name</param>
 /// <param name="op">Query expression operator</param>
 /// <param name="value">Query expression value</param>
 public QueryParameterExpression(string fieldName, QueryFieldOperators op, object value)
 {
     this.FieldName = fieldName;
     this.Operator = op;
     this.Value = value;
 }
        private static string TranslateQueryFieldOperator(QueryFieldOperators queryFieldOperator)
        {
            switch (queryFieldOperator)
            {
                case QueryFieldOperators.Between:
                    return Resources.DP_QueryFieldOperator_Between;

                case QueryFieldOperators.Equal:
                    return Resources.DP_QueryFieldOperator_Equal;

                case QueryFieldOperators.GreaterEqualThan:
                    return Resources.DP_QueryFieldOperator_GreaterEqualThan;

                case QueryFieldOperators.GreaterThan:
                    return Resources.DP_QueryFieldOperator_GreaterThan;

                case QueryFieldOperators.In:
                    return Resources.DP_QueryFieldOperator_In;

                case QueryFieldOperators.LessEqualThan:
                    return Resources.DP_QueryFieldOperator_LessEqualThan;

                case QueryFieldOperators.LessThan:
                    return Resources.DP_QueryFieldOperator_LessThan;

                case QueryFieldOperators.Like:
                    return Resources.DP_QueryFieldOperator_Like;

                case QueryFieldOperators.NotIn:
                    return Resources.DP_QueryFieldOperator_NotIn;

                case QueryFieldOperators.StartsWith:
                    return Resources.DP_QueryFieldOperator_StartsWith;
            }

            return Resources.DP_QueryFieldOperator_Auto;
        }