Exemplo n.º 1
0
        protected virtual Command Filter(ValueCompareFilter filter)
        {
            //Validating if there are filters defined
            if (filter == null)
            {
                return(null);
            }

            Command          command = new Command();
            CommandParameter param   = new CommandParameter(filter.ValueToCompare, null, filter.Column.DbType);

            command.Parameters.Add(param);

            command.Script =
                EqualityComparison
                (
                    ColumnFullName(filter),
                    param.Name,
                    filter.Operator
                );

            return(command);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Copies all values entered by the user to a DavaValueInstance collection
        /// </summary>
        /// <param name="members">Collection where values will be copied to</param>
        public Filter GetFilter(MemberInfo member)
        {
            //validate arguments
            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            //filters
            Filter filter = null;

            DataType dtype      = member.DeclaringType;
            Type     returnType = MemberExpression.GetReturnType(member);

            //is this a single value member? (not a foreign key?)
            if (dtype.IsMapped(member.Name))
            {
                DataMember dmember = dtype[member.Name];

                #region Range filter

                //if it's a datetime or a numeric field, create range filter
                if (returnType.Equals(typeof(DateTime)) || returnType.IsNumeric())
                {
                    //realted fields
                    FormField fieldMin = null, fieldMax = null;

                    //search corresponding field for this DataValueInstance
                    foreach (FormField f in Fields)
                    {
                        if (f.Name == member.Name + "_0")
                        {
                            fieldMin = f;
                        }
                        if (f.Name == member.Name + "_1")
                        {
                            fieldMax = f;
                        }
                    }

                    //if no controls where found, return no filter
                    if (fieldMin == null && fieldMax == null)
                    {
                        return(null);
                    }

                    //if no value was set, return no filter
                    if (!RequiredValidator.HasValue(fieldMin.Value) && !RequiredValidator.HasValue(fieldMax.Value))
                    {
                        return(null);
                    }

                    //if both values are set, create range filter
                    if (RequiredValidator.HasValue(fieldMin.Value) && RequiredValidator.HasValue(fieldMax.Value))
                    {
                        filter = new RangeFilter(dmember, (IComparable)fieldMin.Value, (IComparable)fieldMax.Value);
                    }

                    //only min value is defined
                    else if (RequiredValidator.HasValue(fieldMin.Value))
                    {
                        filter = new ValueCompareFilter(dmember, (IComparable)fieldMin.Value, CompareOperator.GreaterThanEqual);
                    }

                    //only max value is defined
                    else if (RequiredValidator.HasValue(fieldMax.Value))
                    {
                        filter = new ValueCompareFilter(dmember, (IComparable)fieldMax.Value, CompareOperator.LessThanEqual);
                    }
                }

                #endregion

                #region Single value filter

                //create single value filter
                else
                {
                    //realted fields
                    FormField field = Fields.Where(f => f.Name == member.Name).SingleOrDefault();

                    //if field not found, return no filter
                    if (field == null)
                    {
                        return(null);
                    }

                    //if no value was set, return no filter
                    if (!RequiredValidator.HasValue(field.Value))
                    {
                        return(null);
                    }

                    //if its a string, make a LIKE filter
                    else if (field.ValueType.Equals(typeof(string)))
                    {
                        filter = new LikeFilter(dmember, "%" + field.Value + "%");
                    }

                    //otherwise create a compare filter
                    else
                    {
                        filter = new ValueCompareFilter(dmember, (IComparable)field.Value, CompareOperator.Equal);
                    }
                }

                #endregion
            }
            //this is a foreign key
            else if (DataType.IsMapped(returnType) && dtype.IsForeignKey(member))
            {
                //realted fields
                FormField field = Fields.Where(f => f.Name == member.Name).SingleOrDefault();

                //if field not found, return no filter
                if (field == null)
                {
                    return(null);
                }

                //if no value was set, return no filter
                if (!RequiredValidator.HasValue(field.Value))
                {
                    return(null);
                }

                filter = new ForeignKeyFilter(dtype, member, field.Value);
            }

            return(filter);
        }