/// <summary>
        /// Sets the query filter expression for properties of the specified type.
        /// </summary>
        /// <param name="queryFilter">The query filter to use.</param>
        /// <typeparam name="T">The type of the properties to use this expression for.</typeparam>
        /// <returns>The query filter expression that is registered.</returns>
        public IQueryFilterExpression <T> SetExpression <T>(IQueryFilterExpression <T> queryFilter)
        {
            var dispatcher = GenericDispatcher.GetFor(queryFilter);
            var type       = typeof(T);

            if (_filters.ContainsKey(type))
            {
                _filters[type] = dispatcher;
            }
            else
            {
                _filters.Add(type, dispatcher);
            }

            return(queryFilter);
        }
        private static string GetODataQueryOptionFromFilter(IQueryFilterExpression filter)
        {
            var propertyStringName = filter.PropertyName.GetColumnName();
            var parameter          = filter.Parameter;

            switch (filter.Operator)
            {
            case FilterExpressionOperator.Equals:
            {
                var propertyType = filter.PropertyName.GetSchemaInfo().ColumnType;

                if (typeof(string) == propertyType)
                {
                    return(propertyStringName + " eq '" + parameter + "'");
                }

                if (typeof(Int32) == propertyType)
                {
                    return(parameter + " eq " + propertyStringName);
                }

                return(null);
            }

            case FilterExpressionOperator.Likes:
            {
                var propertyType = filter.PropertyName.GetSchemaInfo().ColumnType;

                if (typeof(string) == propertyType)
                {
                    return("substringof('" + parameter + "'," + propertyStringName + ")");
                }

                if (typeof(Int32) == propertyType)
                {
                    return(parameter + " eq " + propertyStringName);
                }

                return(null);
            }

            default:
                throw new ArgumentException();
            }
        }
 public IQueryFilterComplexExpression Or(IQueryFilterExpression filterExpression)
 {
     _filters.Add(filterExpression);
     return(this);
 }
 public IQueryFilterComplexExpression FilterWith(IQueryFilterExpression filterExpression)
 {
     return(Or(filterExpression));
 }
 public static GenericDispatcher GetFor <T>(IQueryFilterExpression <T> queryFilter)
 {
     return(new GenericDispatcher(queryFilter));
 }