예제 #1
0
        internal WSFilter Reduce()
        {
            WSCombineFilter cFilter = new WSCombineFilter(Mode, Negate);

            if (!IsEmpty)
            {
                foreach (WSFilter child in this)
                {
                    WSFilter reduced = (child is WSCombineFilter) ? ((WSCombineFilter)child).Reduce() : child;

                    if (reduced != null)
                    {
                        if (reduced is WSCombineFilter && ((WSCombineFilter)reduced).Any() && ((WSCombineFilter)reduced).Mode == Mode && !((WSCombineFilter)reduced).Negate)
                        {
                            cFilter.SaveRange(((WSCombineFilter)reduced));
                        }
                        else
                        {
                            cFilter.Save(reduced);
                        }
                    }
                }
            }
            return(!cFilter.Any() ? null : (cFilter.Count == 1 && !cFilter.Negate) ? cFilter[0] : cFilter);
        }
예제 #2
0
 public override WSFilter GetFieldFilter(MetaFunctions CFunc, WSTableParam param, Expression parent, int level, string state = null, bool?negate = null)
 {
     try
     {
         WSCombineFilter filter = new WSCombineFilter(WSCombineFilter.SQLMode.AndAlso);
         filter.SaveRange(Value.Select(x => x.GetFieldFilter(CFunc, param, parent, level, state, negate)).ToList()); /*DONT FORVARD 'negate' parameter to avoid complicatency*/
         return(filter.Any() ? (filter.Count == 1 && !filter.Negate) ? filter.FirstOrDefault() : filter : null);
     }
     catch (Exception e) { WSStatus status = WSStatus.NONE.clone(); CFunc.RegError(GetType(), e, ref status); }
     return(null);
 }
예제 #3
0
 public override WSFilter GetOptionFilter(MetaFunctions CFunc, Expression parent, int level, string state = null, bool?negate = null)
 {
     try
     {
         WSCombineFilter filter = new WSCombineFilter(WSCombineFilter.SQLMode.OrElse, negate);
         filter.SaveRange(Value.Select(x => x.GetOptionFilter(CFunc, parent, level, state, null)).ToList());
         return(filter.Any() ? (filter.Count == 1 && !filter.Negate) ? filter.FirstOrDefault() : filter : null);
     }
     catch (Exception e) { WSStatus status = WSStatus.NONE.clone(); CFunc.RegError(GetType(), e, ref status); }
     return(null);
 }