コード例 #1
0
 protected static QueryFilterClause FromLinQExpressionBody(Expression body)
 {
     if (body == null)
     {
         return(null);
     }
     return
         (QueryFilterBooleanOperator.fromBooleanExpression(body) as QueryFilterClause ??
          QueryFilterCondition.fromConditionExpression(body));
 }
コード例 #2
0
        public void AddFilterCondition(QueryFilterClause filter, bool useOr = false)
        {
            var res = filter;

            if (res == null)
            {
                return;
            }
            if (Filter == null)
            {
                Filter = res is QueryFilterBooleanOperator ? res as QueryFilterBooleanOperator
                      : new QueryFilterBooleanOperator(res, null);
                return;
            }

            QueryFilterClause cleanFilter;

            if (Filter.Operator != QueryFilterBooleanOperator.not)
            {
                if (Filter.Child1 == null && Filter.Argument1 == null)
                {
                    cleanFilter = Filter.Argument2 as QueryFilterClause ?? Filter.Child2;
                }
                else if (Filter.Child2 == null && Filter.Argument2 == null)
                {
                    cleanFilter = Filter.Argument1 as QueryFilterClause ?? Filter.Child1;
                }
                else
                {
                    cleanFilter = Filter;
                }
            }
            else
            {
                cleanFilter = Filter;
            }
            Filter = new QueryFilterBooleanOperator(cleanFilter, res);
            if (useOr)
            {
                Filter.Operator = QueryFilterBooleanOperator.or;
            }
        }
コード例 #3
0
        internal static QueryFilterBooleanOperator fromBooleanExpression(Expression booleanExpression)
        {
            switch (booleanExpression.NodeType)
            {
            case ExpressionType.And:
            case ExpressionType.Or:
                var bop = booleanExpression as BinaryExpression;
                var res = new QueryFilterBooleanOperator(FromLinQExpressionBody(bop.Left), FromLinQExpressionBody(bop.Right));
                if (booleanExpression.NodeType == ExpressionType.Or)
                {
                    res.Operator = QueryFilterBooleanOperator.or;
                }
                return(res);

            case ExpressionType.Not:
                var uop  = booleanExpression as UnaryExpression;
                var ures = new QueryFilterBooleanOperator(FromLinQExpressionBody(uop.Operand), null);
                ures.Operator = QueryFilterBooleanOperator.not;
                return(ures);

            default: return(null);
            }
        }