public static void ForSubtreePreorder(
     this FilterExpression exp,
     FilterExpressionExtensions.FilterAction filterAction,
     FilterExpressionExtensions.ConditionAction conditionAction)
 {
     exp.ForSubtreePreorder((FilterExpression)null, filterAction, conditionAction);
 }
 public static void ForSubtreePreorder(
     this FilterExpression exp,
     FilterExpression parent,
     FilterExpressionExtensions.FilterAction filterAction,
     FilterExpressionExtensions.ConditionAction conditionAction)
 {
     exp.ForSubtreePreorder(parent, (FilterExpressionExtensions.FilterAction)((e, p) =>
     {
         filterAction(e, p);
         if (e.Conditions == null)
         {
             return;
         }
         foreach (ConditionExpression condition in (Collection <ConditionExpression>)e.Conditions)
         {
             conditionAction(condition, e);
         }
     }));
 }
 public static void ForSubtreePreorder(
     this FilterExpression exp,
     FilterExpressionExtensions.FilterAction action)
 {
     exp.ForSubtreePreorder((FilterExpression)null, action);
 }