Пример #1
0
        public WSFilter GetMainFilter(WSRequest Request, Expression _EntityExpression, int _level)
        {
            WSCombineFilter mainFilter = new WSCombineFilter(WSCombineFilter.SQLMode.AndAlso);

            WSFilter BaseFilter = GetBaseFilter(Request, _EntityExpression, _level);
            if (BaseFilter != null && BaseFilter.IsValid) { mainFilter.Save(BaseFilter); }

            WSFilter CustomFilter = GetCustomFilter(_EntityExpression, _level);
            if (CustomFilter != null && CustomFilter.IsValid) { mainFilter.Save(CustomFilter); }

            return mainFilter != null && mainFilter.IsValid ? mainFilter.Reduce() : null;
        }
Пример #2
0
        public override WSFilter GetCustomFilter(Expression _EntityExpression, int _level)
        {
            WSCombineFilter mainFilter = !IsFiltrable ? null : new WSCombineFilter(CombineMode);

            if (mainFilter != null && _EntityExpression != null)
            {
                Expression member = null;
                if (_EntityExpression.Type == Source.ReturnType)
                {
                    member = _EntityExpression;
                }
                else if (Parent != null)
                {
                    WSTableParam paramExt = (WSTableParam)Parent.Source.GetXParam(Name);
                    if (paramExt != null)
                    {
                        member = Expression.Property(_EntityExpression, paramExt.WSColumnRef.NAME);
                    }
                }

                if (member != null && IsFiltrable)
                {
                    if (Fields != null && Fields.Any())
                    {
                        WSCombineFilter cFields = new WSCombineFilter(Fields.CombineMode);
                        mainFilter.Save(cFields);
                        foreach (WSSchema field in Fields)
                        {
                            cFields.Save(field.GetCustomFilter(member, _level));
                        }
                    }
                    if (Filters != null && Filters.Any())
                    {
                        WSCombineFilter cFilters = new WSCombineFilter(Filters.CombineMode);
                        mainFilter.Save(cFilters);
                        foreach (WSSchema field in Filters)
                        {
                            cFilters.Save(field.GetCustomFilter(member, _level));
                        }
                    }
                }

                if (IOBaseOptions != null && !IOBaseOptions.IsEmpty)
                {
                    mainFilter.Save(IOBaseOptions.GetOptionFilter(Func, member, _level + 1));
                }
            }
            return(mainFilter != null && mainFilter.IsValid ? mainFilter.Reduce() : mainFilter);
        }
Пример #3
0
        public override WSFilter GetBaseFilter(WSRequest Request, Expression _member, int _level, WSJson _BaseFilter = null)
        {
            WSJson          BaseFilter = _BaseFilter == null ? Source.BaseFilter : _BaseFilter;
            WSCombineFilter filter     = new WSCombineFilter(WSCombineFilter.SQLMode.AndAlso);

            if (filter != null && BaseFilter != null && BaseFilter.IsValid)
            {
                Expression member = null;
                filter = BaseFilter is WSJArray ? new WSCombineFilter(WSCombineFilter.SQLMode.OrElse) : filter;

                BaseFilter.apply(Request, Func);

                if (BaseFilter != null && BaseFilter.IsValid)
                {
                    if (_member.Type == Source.ReturnType)
                    {
                        member = _member;
                    }
                    else if (Parent != null)
                    {
                        WSTableParam paramExt = (WSTableParam)Parent.Source.GetXParam(Name);
                        if (paramExt != null)
                        {
                            member = Expression.Property(_member, paramExt.WSColumnRef.NAME);
                        }
                    }

                    if (member != null)
                    {
                        if (BaseFilter is WSJValue)
                        {
                            if (((WSJValue)BaseFilter).Value.IsTrue() || ((WSJValue)BaseFilter).Value.IsFalse())
                            {
                                WSFilter subFilter = ((WSJValue)BaseFilter).GetOptionFilter(Func, member, _level);
                                if (subFilter != null)
                                {
                                    filter.Add(subFilter);
                                }
                            }
                        }
                        else if (BaseFilter is WSJObject)
                        {
                            foreach (WSJProperty item in ((WSJObject)BaseFilter).Value)
                            {
                                bool replace = true;
                                List <WSMemberSchema> _schemas = readFieldSchema(item, out replace);
                                if (_schemas.Any())
                                {
                                    foreach (WSMemberSchema _schema in _schemas)
                                    {
                                        WSFilter subFilter = _schema.GetCustomFilter(member, _level);
                                        if (subFilter != null)
                                        {
                                            filter.Add(subFilter);
                                        }
                                    }
                                }
                            }
                        }
                        else if (BaseFilter is WSJArray)
                        {
                            foreach (WSJson item in ((WSJArray)BaseFilter).Value)
                            {
                                bool replace = true;
                                List <WSMemberSchema> _schemas = readFieldSchema(item, out replace);
                                if (_schemas.Any())
                                {
                                    foreach (WSMemberSchema _schema in _schemas)
                                    {
                                        WSFilter subFilter = _schema.GetCustomFilter(member, _level);
                                        if (subFilter != null)
                                        {
                                            filter.Add(subFilter);
                                        }
                                    }
                                }
                                else if (item is WSJValue && (((WSJValue)item).Value.IsTrue() || ((WSJValue)item).Value.IsFalse()))
                                {
                                    WSFilter subFilter = ((WSJValue)item).GetOptionFilter(Func, member, _level);
                                    if (subFilter != null)
                                    {
                                        filter.Add(subFilter);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            WSFilter result = filter != null && filter.IsValid ? filter.Reduce() : null;

            return(result);
        }