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; }
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); }
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); }