protected static QueryFilterClause FromLinQExpressionBody(Expression body) { if (body == null) { return(null); } return (QueryFilterBooleanOperator.fromBooleanExpression(body) as QueryFilterClause ?? QueryFilterCondition.fromConditionExpression(body)); }
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; } }
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); } }