Beispiel #1
0
        public static string BuildWhereClause <T>(FilterInfo filter, int index, List <object> parameters)
        {
            var entityType = (typeof(T));
            var property   = entityType.GetProperty(filter.Field);

            string[] filterArray = filter.Field.Split('.');
            if (filterArray.Length > 1)
            {
                foreach (var str in filterArray)
                {
                    property = entityType.GetProperty(str);
                    if (property.PropertyType.Namespace == "System.Collections.Generic")
                    {
                        entityType = property.PropertyType.GenericTypeArguments[0];
                    }
                    else
                    {
                        entityType = property.PropertyType;
                    }
                }
            }

            var parameterIndex = parameters.Count;

            switch (filter.Operator.ToLower())
            {
            case "eq":
            case "neq":
            case "gte":
            case "gt":
            case "lte":
            case "lt":
                //penanganan untuk atribut yang tidak terdapat di kelas (dari foreign key), misalnya contractor.name di model project
                //kemungkinan akan bermasalah kalau atribut bukan string, misalnya contractor.id
                if (property != null)
                {
                    if ((typeof(Nullable <DateTime>).IsAssignableFrom(property.PropertyType)) || (typeof(DateTime).IsAssignableFrom(property.PropertyType)))
                    {
                        parameters.Add(DateTime.Parse(filter.Value).Date);
                        return(string.Format("EntityFunctions.TruncateTime(" + filter.Field + ")" + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    if (typeof(int).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(int.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    //belum ditangani di source code asli
                    if (typeof(Nullable <Byte>).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(int.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    if (typeof(Nullable <int>).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(int.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    if (typeof(Boolean).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(Boolean.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    if (typeof(Guid).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(Guid.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                    if (typeof(decimal).IsAssignableFrom(property.PropertyType))
                    {
                        parameters.Add(Decimal.Parse(filter.Value));
                        return(string.Format(filter.Field + ToLinqOperator(filter.Operator) + "@" + parameterIndex));
                    }
                }
                parameters.Add(filter.Value.ToLower());
                return(string.Format(filter.Field + ".ToLower()" + ToLinqOperator(filter.Operator) + "@" + parameterIndex));

            case "startswith":
                parameters.Add(filter.Value.ToLower());
                return(filter.Field + ".ToLower().StartsWith(" + "@" + parameterIndex + ")");

            case "endswith":
                parameters.Add(filter.Value.ToLower());
                return(filter.Field + ".ToLower().EndsWith(" + "@" + parameterIndex + ")");

            case "contains":
                parameters.Add(filter.Value.ToLower());
                return(filter.Field + ".ToLower().Contains(" + "@" + parameterIndex + ")");

            case "notcontains":
                parameters.Add(filter.Value.ToLower());
                return("!" + filter.Field + ".ToLower().Contains(" + "@" + parameterIndex + ")");

            default:
                throw new ArgumentException("This operator is not yet supported for this Grid", filter.Operator);
            }
        }
Beispiel #2
0
        //TODO: pull default values from config
        internal void Populate()
        {
            if (HttpContext.Current != null)
            {
                HttpRequest curRequest = HttpContext.Current.Request;
                if (curRequest["page"] != null)
                {
                    this.Page = int.Parse(curRequest["page"]);
                }
                if (curRequest["pageSize"] != null)
                {
                    this.PageSize = int.Parse(curRequest["pageSize"]);
                }
                if (curRequest["skip"] != null)
                {
                    this.Skip = int.Parse(curRequest["skip"]);
                }
                if (curRequest["take"] != null)
                {
                    this.Take = int.Parse(curRequest["take"]);
                }
                //this.FilterLogic = curRequest["filter[logic]"];

                //build sorting objects
                var sorts = new List <SortingInfo>();
                var x     = 0;
                while (x < 20)
                {
                    var sortDirection = curRequest["sort[" + x + "][dir]"];
                    if (sortDirection == null)
                    {
                        break;
                    }
                    var sortOn = curRequest["sort[" + x + "][field]"];
                    if (sortOn != null)
                    {
                        sorts.Add(new SortingInfo {
                            SortOn = sortOn, SortOrder = sortDirection
                        });
                    }
                    x++;
                }
                Sortings = sorts;

                //build filter objects
                var filters = new FilterInfo();
                var logic   = curRequest["filter[logic]"];
                filters.Logic = logic;

                bool stopLevel1 = false; int level1 = 0;
                while (!stopLevel1)
                {
                    FilterInfo fi     = new FilterInfo();
                    var        field1 = curRequest["filter[filters][" + level1 + "][field]"];
                    if (field1 == null)
                    {
                        field1 = curRequest["filter[filters][" + level1 + "][filters][0][field]"];
                        if (field1 == null)
                        {
                            stopLevel1 = true;
                        }
                        else //level 1
                        {
                            fi.Logic = curRequest["filter[filters][" + level1 + "][logic]"];

                            bool stopLevel2 = false; int level2 = 0;
                            while (!stopLevel2)
                            {
                                var field2 = curRequest["filter[filters][" + level1 + "][filters][" + level2 + "][field]"];
                                if (field2 == null)
                                {
                                    stopLevel2 = true;
                                }
                                else
                                {
                                    var fi2 = new FilterInfo();
                                    fi2.Field    = curRequest["filter[filters][" + level1 + "][filters][" + level2 + "][field]"];
                                    fi2.Operator = curRequest["filter[filters][" + level1 + "][filters][" + level2 + "][operator]"];
                                    fi2.Value    = curRequest["filter[filters][" + level1 + "][filters][" + level2 + "][value]"];

                                    if (fi.Filters == null)
                                    {
                                        fi.Filters = new List <FilterInfo>();
                                    }
                                    fi.Filters.Add(fi2);

                                    ++level2;
                                }
                            }
                        }
                    }
                    else
                    {
                        fi.Field    = field1;
                        fi.Operator = curRequest["filter[filters][" + level1 + "][operator]"];
                        fi.Value    = curRequest["filter[filters][" + level1 + "][value]"];
                    }

                    if (!stopLevel1)
                    {
                        if (filters.Filters == null)
                        {
                            filters.Filters = new List <FilterInfo>();
                        }
                        filters.Filters.Add(fi);

                        ++level1;
                    }
                }

                Filters = filters;
            }
        }