public Expression <TraceLogFilterPredicate> CreatePredicateExpr(TraceLogFilter filter) { var enabled = filter.Conditions.Where(x => x.IsEnabled).ToList(); var includedConds = enabled.Where(x => x.Action == FilterConditionAction.Include); var excludedConds = enabled.Where(x => x.Action == FilterConditionAction.Exclude); var includeExpr = ExpressionEx.OrElse(includedConds.Select(CreateComparisonExpr), true); var excludeExpr = ExpressionEx.OrElse(excludedConds.Select(CreateComparisonExpr), false); var filterExpr = Expression.AndAlso(includeExpr, Expression.Not(excludeExpr)); return(CreateLambda(filterExpr)); }
Expression INodeVisitor <Expression, ExpressionNodeVisitorInput> .VisitComplexNode(ComplexNode node, ExpressionNodeVisitorInput input) { Expression expression = null; foreach (var childNode in node.Nodes) { expression = expression == null ? childNode.Accept(this, input) : childNode.LogicalOperator == LogicalOperator.And ? ExpressionEx.AndAlso(expression, childNode.Accept(this, input)) : ExpressionEx.OrElse(expression, childNode.Accept(this, input)); } return(expression); }